2011-08-20 42 views
1

我有2个表mysql表中的外键 - 是否需要目标数据?

表A(ID_A,name_A,info_A)

tableB的(ID_B,A_ID,some_data)外键(A_ID)引用表A(ID_A)

所以,当我插入一行在B中,将值XXX作为第二列id_A中的值,是否有必要将table_A以XXX作为id的行?

如果不是,那么我应该在表上放置什么约束,以便表B只引用一个table_A存在的行?

回答

0

是的,如果TableA.id_A是主键,并且TableB.A_id具有引用该主键的外键约束,那么在TableB.A_id可以包含XXX之前,XXX值必须存在于TableA.id_A中。

这也意味着当TableB.A_id中存在值XXX时,您无法删除或更改TableA.id_A中的XXX值。您必须首先删除,更改或将TableB.A_id中的值设置为NULL。您还可以使用CASCADE选项声明外键,以便TableA中的更改也以原子方式应用于TableB。但是你永远不能在依赖表中有一个“孤立”值。

请注意,如果您对TableA或TableB使用MyISAM存储引擎,那么您的外键约束定义将被静默忽略,并且数据库不会强制执行这两个表之间的任何参照完整性。您必须对两个表使用InnoDB存储引擎才能获得对外键约束的支持。

+0

好的。那个答案。我有同样的印象,但是我的MySQL表格在我能够按照我提到的方式添加行的方式中表现出奇怪的表现。 InnoDB和MyISAM是这里真正的罪魁祸首。谢谢。 – Neeraj

+0

请记住点赞对您有帮助的答案,并接受您的问题的最佳答案。这在StackOverflow上是习惯的。 –