首页 > 解决方案 > 删除时 SQL 触发器实现反向级联

问题描述

我在这里有 3 张表对我的问题很重要。Debates 包含几个 Arguments,它们是 Posts 的子项。当我删除辩论时,我还想删除相关论点以及相应的帖子。

我尝试的第一件事是为参数创建级联删除,但这不会删除帖子。实际上,这需要“反向”级联删除,因为帖子是参数的父级。正如在是否有任何“反向”ON DELETE CASCADE 选项中所建议的那样?,然后我尝试在删除参数时添加一个触发器以删除帖子,但是这个问题(关于删除级联不触发触发器)显示 MySQL '触发器未被外键操作激活。

所以我想通过创建一个完全按照我在第一段中解释的触发器来解决这个问题。

CREATE TRIGGER argument_delete BEFORE DELETE on debates
FOR EACH ROW
BEGIN
DELETE FROM posts
       WHERE posts.id IN (SELECT arguments.id FROM arguments WHERE arguments.debate_id = debates.id);
END

由于在删除帖子时会级联删除参数,因此这应该有效。

但是,删除辩论后,此触发器似乎不起作用。如果我删除辩论和论点之间的级联删除,我会收到错误说存在外键约束违规,或者当我保留先前引用的级联删除时,我只会删除辩论和论点(而不是帖子)。

有人知道如何做到这一点吗?


编辑:

我实际上将触发器的删除部分基于这个问题: Delete all rows in a table based on another table

标签: mysqlsql

解决方案


推荐阅读