mysql - 删除时 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
解决方案
推荐阅读
- javascript - 反应错误:无法读取未定义的属性“用户”
- tesseract - hOCR 文件中 x_descenders 和 x_ascenders 的含义?
- c++ - 在 C++ 中拥有多个指向单个对象的指针的正确方法是什么?
- javascript - 使用 for 循环运行异步函数是一种好习惯吗?
- outlook - 如果 Outlook/yahoo 服务器不支持 IMAP CONDSTORE,那么从上次检查中获取标志更改的替代方法是什么
- c - 从文件中读取行时,偶尔会触发分段错误/不正确的校验和
- google-cloud-platform - 如何将本地数据工作流迁移到 Google Cloud?
- python-3.x - pytorch中的类型不匹配
- postgresql - 将列乘以一的不同值
- unix - 如何记录我的 SFTP 命令的输出