MySQL外键在同一个表上

时间:2013-08-25 16:50:55

标签: mysql

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

  

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

3 个答案:

答案 0 :(得分:7)

您的评论表可能仍然包含isReply个值的答案,这些值引用了您在测试期间删除的评论。听听MySQL试图说的话:

a foreign key constraint fails

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

注意您可能希望使用以下内容将isReply的默认值设置为null

ALTER TABLE comments CHANGE isReply isReply integer DEFAULT NULL;

答案 1 :(得分:6)

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

有关详细信息,请参阅:Mysql error 1452 - Cannot add or update a child row: a foreign key constraint fails它解释了失败的原因,如何找到失败的记录以及如何规避您的问题。

答案 2 :(得分:0)

创建触发器以删除具有相同条件的所有记录。在评论表中删除记录时。

Check triggers documentation

查看this Question

否则,您不能使用与外键位于同一表中的列。