我有三张桌子对我的问题很重要。辩论包括几个论点,这是Posts的孩子。当我删除辩论时,我还想删除相关的参数,以及相应的帖子。
我尝试的第一件事是为参数创建级联删除,但这不会删除帖子。实际上,这需要“反向”级联删除,因为帖子是参数的父级。正如Is there any "reverse" ON DELETE CASCADE option?中所建议的那样,我试图在删除参数时添加一个触发器以删除帖子,但是这个问题(on delete cascade not firing trigger)显示MySQL的触发器没有被外键操作激活。 / p>
所以我想通过创建一个完全按照我在第一段中解释的触发器来解决这个问题。
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