如何更正此问题('无法删除或更新父行')?

时间:2016-08-14 19:30:48

标签: mysql sql

mysql> delete from faculty where fid in ( select fid from class);
  

错误1451(23000):无法删除或更新父行:异类   键约束失败(ass1class,CONSTRAINT class_ibfk_1   外键(fid)参考facultyfid))

这引发了上述错误。我该怎么办?

3 个答案:

答案 0 :(得分:1)

在不知道后果的情况下强制执行此操作是危险的。

发生此错误是因为有另一个表与您尝试删除的内容有外键关联。您希望在依赖已删除数据的其他表中的那些行中发生什么?以下是一些选项:

  • 如果您要删除那些依赖您尝试删除的数据的行,请查看cascade deletion
  • 如果您决定依赖于您需要删除的数据的数据不再具有外键约束,则可以drop the constraint
  • 如果您不想要其中任何一项,请考虑不要实际删除您的数据,而是使用布尔列将行标记为"非活动"。然后,您可以根据需要在检索数据时过滤标记,同时仍然保留依赖于该过去的旧记录"过时"数据。

答案 1 :(得分:0)

您正试图从父表中删除。这可能是您收到错误的原因。

答案 2 :(得分:0)

将FK设置为​​级联删除:

YourForeignIDField INT NOT NULL REFERENCES ParentTable.ID ON UPDATE CASCADE ON DELETE CASCADE

或者设置外来ID以接受Null并级联为null:

YourForeignIDField INT NULL REFERENCES ParentTable.ID ON UPDATE CASCADE ON DELETE SET NULL

或先删除所有孩子:

DELETE FROM ChildTable WHERE ForeignID = YourForgeignID;
DELETE FROM ParentTable WHERE ID = YourID;