MySQL外键在同一个表上

php*_*_qq 9 mysql

我有这个表存储评论.每条评论都有自己的ID和isReply列,以防评论是对另一条评论的回复.我想知道我是否可以设置关系,以便在删除评论时,所有回复该评论的评论都会自动删除.我尝试将外键设置为isReply引用列comments.id但我收到此错误:

#1452 - 无法添加或更新子行:外键约束失败(_db.#sql-1030_31f,CONSTRAINT #sql-1030_31f_ibfk_1 FOREIGN KEY(isReply)REFERENCES comments(id)ON DELETE CASCADE ON UPDATE NO ACTION)

eds*_*ufi 8

您的注释表可能仍然包含isReply引用在测试期间已删除的注释的值的答案.听听MySQL试图说的话:

a foreign key constraint fails
Run Code Online (Sandbox Code Playgroud)

您所要做的就是清空表,定义外键(您的错误应该消失),然后您将拥有所需的行为.一旦创建了FK,就不需要触发器,这就是为什么存在级联的原因.

请注意,你可能要设置的默认值isReplynull使用:

ALTER TABLE comments CHANGE isReply isReply integer DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)


小智 6

实际上,同一个表中的外键完全有效的.1452只是意味着你有一个或多个项目引用了一个不存在的项目,因此你的外键定义无效.

有关详细信息,请参阅:Mysql错误1452 - 无法添加或更新子行:外键约束失败,它解释了它失败的原因,如何找到失败的记录以及如何绕过您的问题.