我在MySQL中有表“A”。它有一些参考,级联删除到其他一些表(“B”,“C”,“D”......)。当某些内容从“A”中删除时,我需要使用触发器。当我直接从“A”删除记录时,此触发器有效。但它不适用于级联删除。 是否存在任何版本的MySQL,我的触发器将与级联删除一起使用?或者,也许还有另一种方式来调用
答案 0 :(得分:27)
从 http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html
级联外键操作不会激活触发器
换句话说,您无法使用级联删除触发器。
另见相关错误:
答案 1 :(得分:6)
总结@Niel de Wet和@Browny Lin的答案:
答案 2 :(得分:2)
让我分享一下,在我发现它存在的第一天,我一直在“修复”这个问题。我将触发器从级联表复制到第一个直接删除的表中。它只是有效。
很多时候这是复制/粘贴的问题,偶尔需要大量重写代码。
最好的部分是,当Oracle最终修复此 Bug 时,您只需从该表中删除触发器代码。瞧!
答案 3 :(得分:0)
很遗憾,这是一个错误。但是我们可以做一些事情来实现我们所需要的。无需为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;
这现在可以让您执行其他触发器工作。
我希望这会有所帮助。