web-dev-qa-db-ja.com

INSERTステートメントがFOREIGN KEY制約と競合しました。データベースで競合が発生しました

私はこの問題を数時間抱えています。 SQL Server、私はこのクエリを実行しました:

INSERT INTO USERS_AVATAR(userId, avatId) VALUES ('1', '213');
INSERT INTO USERS_AVATAR(userId, avatId) VALUES ('2', '312');

しかし、メッセージは言って現れます:

メッセージ547、レベル16、状態0、行1
INSERTステートメントがFOREIGN KEY制約「FKUSERS_AVAT731248」と競合しました。データベース "gk314"、テーブル "gk314.USERS"、列 'userId'で競合が発生しました。

メッセージ547、レベル16、状態0、行2
INSERTステートメントがFOREIGN KEY制約「FKUSERS_AVAT731248」と競合しました。データベース "gk314"、テーブル "gk314.USERS"、列 'userId'で競合が発生しました。

助けてください!

5
problems

UserIdsを挿入する前に1および2からUSERS_AVATAR、最初にそれらをテーブルUSERSに挿入する必要があります。これが、FOREIGN KEY制約で必要なものです。

12
Russ

外部キー制約は、SQLの「このテーブルはデータが他のテーブルに存在することを期待する」という言い方です。これにより、データが2回存在したり、同期を維持したりすることなく、他のテーブルを参照できます。

この場合、ユーザーデータのテーブル(USERS)とアバターデータのテーブル(AVATARS)があり、USERS_AVATARテーブルはこの2つをリンクしています。ユーザーをusersテーブルに追加し、アバターをアバターテーブルに追加する必要があります。その後、2つをリンクできます。次のようになります。

INSERT INTO USERS (userId, email, password, status) VALUES (1, '[email protected]',' gk314', 'strong')
INSERT INTO AVATARS (avatId, name, ...) VALUES (1, 'Avatar1', ...)
INSERT INTO USERS_AVATAR (userId, avatId) VALUES (1, 1)

元の回答:

これは、gk314.USERSに追加しようとしているuserIdと一致するuserIdがないUSERS_AVATARというテーブルがあることを意味します。 USERSテーブルを確認し、userId 1および2を使用してユーザーを追加すると、USERS_AVATARテーブルに追加できるようになります。

1
Adam V