我无法从数据库对象中删除行。在我的例子中,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)
指出正确的方向。
答案 0 :(得分:1)
这就是NO ACTION
所做的,它可以防止删除包含任何子行的行。如果您也想删除孩子,请使用CASCADE
。
您还可以通过将数据设置为ON DELETE SET NULL
来保留数据,在这种情况下,如果删除父项,则子行的外键列将设置为null。
答案 1 :(得分:1)
我认为在设计具有大量外键的数据库时,这是一个很好的做法。如果你有ON DELETE CASCADE选项的表与其他表链接到其他表,删除级联选项将失败(因为mysql无法按照你创建表的相同顺序删除)“。这种情况的解决方案是声明一个子句ON DELETE在其他外键中设置NULL