-3

第一个表“A”由 refid(主键)、姓名、性别、年龄、状态组成 第二个表“b”由 refid(主键)和 statename 组成,当我在表 A 中编写查询以引用 B 时,它没有'不起作用,但是当我从表 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

你说你得到一个

无法添加或更新子行:外键约束失败

当你有一个 FK from A.refidto时出错B.refid

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

外键用于维护引用完整性,因此如果您有一个 FK from A.refidto B.refid,那么您不能插入refid=XA,除非refid=X已经在B. 错误消息告诉您您正在尝试插入(或更新)一个不在的refid值,例如:AB

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

如果将 FK 反转为指向 fromB.refid到,A.refid则上面的 INSERT 序列将起作用。或者,您可以反转 INSERT:

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

这样外键就不会被破坏。

于 2012-05-21T04:35:09.700 回答