我有这张表存储评论。每条评论都有自己的ID和isReply
列,以防评论是对其他评论的回复。我想知道我是否可以设置关系,以便在删除评论时,所有回复该评论的评论都会自动删除。我尝试将外键设置为引用isReply
的{{1}}列但我收到此错误:
comments.id
1452 - 无法添加或更新子行:外键约束失败(#
。_db
,CONSTRAINT#sql-1030_31f
FOREIGN KEY(#sql-1030_31f_ibfk_1
)REFERENCESisReply
(comments
)ON DELETE CASCADE ON UPDATE NO ACTION)
答案 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)