【发布时间】:2013-08-28 04:32:14
【问题描述】:
我有一张存储 cmets 的表。每条评论都有自己的 ID 和 isReply 列,以防评论是对另一条评论的回复。我想知道是否可以设置一个关系,以便在删除评论时自动删除所有回复该评论的 cmets。我尝试为引用comments.id 的isReply 列设置外键,但出现此错误:
#1452 - 无法添加或更新子行:外键约束失败(_db.#sql-1030_31f,CONSTRAINT#sql-1030_31f_ibfk_1外键 (isReply) 引用comments(id) 删除级联 更新无操作)
【问题讨论】:
-
你能做一个显示上述错误的简化sqlfiddle吗?顺便说一句,不要忘记这个限制:dev.mysql.com/doc/refman/5.0/en/… 另一方面,自引用 ON DELETE SET NULL 是可能的,就像自引用 ON DELETE CASCADE 一样。级联操作的嵌套深度不得超过 15 级。
-
DELETE c1 FROM comments c1 LEFT JOIN comments c2 ON c2.id=c1.isReply WHERE c2.id IS NULL。这应该会删除对已删除 cmets 的所有回复。然后添加一个 FK 就可以了。而不是删除一个可以替代UPDATE ... LEFT JOIN ... ON ... SET c1.isReply=NULL WHERE ...。
标签: mysql