我在 MySQL 中有表“A”。它有一些对其他表(“B”、“C”、“D”...)的级联删除的引用。当从“A”中删除某些内容时,我需要使用触发器。当我直接从“A”删除记录时,此触发器起作用。但它不适用于级联删除。 是否存在任何版本的 MySQL 可以让我的触发器与级联删除一起使用?或者,也许还有另一种打电话方式
来自 http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html
级联外键操作不会激活触发器
也就是说,不能使用触发器进行级联删除。
另请参阅相关错误:
总结@Niel de Wet 和@Browny Lin 的答案:
让我分享一下从我发现这个问题存在的第一天起我是如何“解决”这个问题的。我将触发器从级联表复制到直接删除的第一个表中。它就是有效的。
很多时候这是复制/粘贴的问题,有时需要大量重写代码。
最好的部分是,当 Oracle 最终修复这个Bug时,您只需从上述表中删除触发代码即可。瞧!
是的,不幸的是这是一个错误。但我们确实可以做一些事情来实现我们所需要的。您可以通过创建触发器来实现这一点,而不是为 CASCADE 更新或删除定义外键。
例如,如果您有 2 个表
categories
和 subcategories
,并且您有一个分配给子类别的外键,因此删除一个类别时,其子类别应该会自动删除。您可以在没有外键和使用触发器的情况下实现相同的功能,如下所示:
CREATE TRIGGER categories_delete AFTER DELETE ON categories
FOR EACH ROW BEGIN
DELETE FROM subcategories WHERE category_id = OLD.id;
END;
现在您可以让其他触发器正常工作。
我希望这对你有帮助。
FWIW,自首次报告以来已过去 18 年零 9 个月零 3 天,版本 8.0.36 中仍然存在此问题。
这么大的缺点还没有解决。令人难以置信!