无法从自索引的db对象中删除记录

时间:2012-10-30 07:24:41

标签: mysql database

我无法从数据库对象中删除行。在我的例子中,db对象具有自我索引功能 字段root_id与key_id(主键)具有外键关系。引用完整性设计为ON UPDATE NO ACTION AND ON DELETE NO ACTION。即使我仍然无法删除。

CONSTRAINT `fk_MyTab` FOREIGN KEY (`root_id`) REFERENCES `MyTab` (`key_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

我必须删除此表WHERE key_id = root_id中的记录 当我尝试删除时,我得到以下内容。

  

错误代码:1451。无法删除或更新父行:外键约束失败(`MyTab`,CONSTRAINT`fk_MyTab` FOREIGN KEY(`root_id`)REFERENCES`MyTab`(`key_id`)ON DELETE NO ACTION ON UPDATE NO ACTION)

指出正确的方向。

2 个答案:

答案 0 :(得分:1)

这就是NO ACTION所做的,它可以防止删除包含任何子行的行。如果您也想删除孩子,请使用CASCADE

您还可以通过将数据设置为ON DELETE SET NULL来保留数据,在这种情况下,如果删除父项,则子行的外键列将设置为null。

答案 1 :(得分:1)

我认为在设计具有大量外键的数据库时,这是一个很好的做法。如果你有ON DELETE CASCADE选项的表与其他表链接到其他表,删除级联选项将失败(因为mysql无法按照你创建表的相同顺序删除)“。这种情况的解决方案是声明一个子句ON DELETE在其他外键中设置NULL