使用外键约束从MySQL表中删除

时间:2012-12-10 04:33:54

标签: mysql foreign-keys constraints

我有两个表,其中加载了一些数据,两个表互相引用。表B引用了表A的主键。我手动尝试从表A中删除表B中的一些表行,我得到了这个:

#1451 - 无法删除或更新父行:外键约束失败(TableATableB,CONSTRAINT TableB_ibfk_2 FOREIGN KEY(column)参考flashcardprimaryKeyColumn))

我不太清楚这里有什么。根据我的理解,如果我删除TableA的某些行,那么它们应该自动删除表B中存在的相应行(即如果它们存在于表B中)但显然这不是这里的情况并且它提示上述错误

有人想打我的脑袋,让我知道为什么?

1 个答案:

答案 0 :(得分:4)

不幸的是,您认为应该发生的自动删除不会发生。您需要手动删除表B中包含您要删除的表A中的行ID的行。

尝试将 ON DELETE CASCADE 添加到表B中的外键列定义中。

如果您正在使用Hibernate或其他一些ORM工具,它将具有“级联”机制,可以自动处理此问题。但是,由于您直接与数据库连接,因此必须记住,如果所述行的ID作为外键存在于任何其他表中,则无法删除行(在您的情况下,A的主键存在于B)中的一些行。除非您指定ON DELETE CASCADE属性。