3

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

#1451 - 无法删除或更新父行:外键约束失败 ( TableA. TableB, CONSTRAINT TableB_ibfk_2FOREIGN KEY ( column) REFERENCES flashcard( primaryKeyColumn))

我不太确定这里发生了什么。据我了解,如果我删除 TableA 的某些行,那么它们也应该自动删除表 B 中存在的相应行(即,如果它们存在于表 B 中)但显然这里不是这种情况,它会提示上述错误.

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

4

1 回答 1

4

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

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

如果您使用的是 Hibernate 或其他一些 ORM 工具,它会有一个“级联”机制来自动处理这个问题。但是在这里,由于您直接与数据库交互,因此您必须记住,如果该行的 ID 作为外键存在于任何其他表中(如您的情况,A 的主键存在于B)中的一些行。当然,除非您指定 ON DELETE CASCADE 属性。

于 2012-12-10T04:42:27.567 回答