-3

最初のテーブル 'A' は refid(主キー)、名前、性別、年齢、ステータスで構成されています 2 番目のテーブル 'b' は refid(主キー) と状態名で構成されています。動作しませんが、テーブル B から試してみると動作しました 1) テーブル A からアクセスできないのはなぜですか?

2) A からの参照と B からの参照の違いは何ですか?

          ALTER TABLE A
         ADD FOREIGN KEY (refId)
         REFERENCES B(refId)

         // it doesn't work

         ALTER TABLE B
         ADD FOREIGN KEY (refId)
         REFERENCES A(refId)

         // it works

「機能しない」とは、外部キーからエラーが発生することを意味します。

#1452 - Cannot add or update a child row: a foreign key constraint fails
(testdrive.<result 2 when explaining filename '#sql-4b8_8d'>, CONSTRAINT
#sql-4b8_8d_ibfk_1 FOREIGN KEY (refid) REFERENCES reserve (refid))
4

1 に答える 1

1

あなたはあなたが得ていると言います

子行を追加または更新できません:外部キー制約が失敗します

A.refidからへのFKがある場合のエラーB.refid

ALTER TABLE A
ADD FOREIGN KEY (refId)
REFERENCES B(refId)

外部キーは参照整合性を維持するために使用されるため、からA.refidへのFKがある場合、がすでににある場合を除いて、にB.refid挿入することはできません。エラーメッセージは、にない値を挿入(または更新)しようとしていることを示しています。次に例を示します。refid=XArefid=XBrefidAB

insert into A (refid) values (1);
insert into B (refid) values (1);

FKを逆にしてからを指すB.refidようにするとA.refid、上記のINSERTシーケンスが機能します。または、INSERTを逆にすることもできます。

insert into B (refid) values (1);
insert into A (refid) values (1);

外部キーが侵害されないようにするためです。

于 2012-05-21T04:35:09.700 に答える