0

我无法从数据库对象中删除一行。在我的情况下,数据库对象具有自索引。
字段 roo​​t_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行动)

给我指出正确的方向。

4

2 回答 2

1

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

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

于 2012-10-30T07:27:44.877 回答
1

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

于 2012-10-30T07:32:17.187 回答