第一个表"A"由 refid(主键(、姓名、性别、年龄、状态组成,第二个表"b"由 refid(主键(和状态名称组成,当我在表 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))
你说你得到了一个
无法添加或更新子行:外键约束失败
当您的 FK 从 A.refid
到 B.refid
时出错:
ALTER TABLE A
ADD FOREIGN KEY (refId)
REFERENCES B(refId)
外键用于维护引用完整性,因此如果您有从 A.refid
到 B.refid
的 FK,则无法将refid=X
插入A
,除非refid=X
已在B
中。错误消息告诉您您正在尝试在A
中插入(或更新(不在B
中的refid
值,例如:
insert into A (refid) values (1);
insert into B (refid) values (1);
如果将 FK 反转为从 B.refid
点到A.refid
则上述 INSERT 序列将起作用。或者,您可以反转插入:
insert into B (refid) values (1);
insert into A (refid) values (1);
这样外键就不会被违反。