2013-03-06 114 views
4

我有两个(InnoDB)表,触发器用于UPDATE,INSERT和DELETE。如果我直接在桌子上工作,他们工作得很好。更进一步,我有一个外键约束,当我删除tableA中的一行时tableA.id引用的tableB中的所有行也被删除。这也适用,但问题是:MySQL触发器不被约束调用

DELETE在tableA上触发tableA的DELETE触发器。然后约束删除表B 处的行,但是没有调用表B的DELETE触发器。为什么?做约束不会触发触发器吗?

谢谢。

(触发器AFTER DELETE。有没有成功之前删除也试过。)

+0

级联删除应触发另一个表上的触发器。你使用的是什么版本的MySQL? – landons 2013-03-06 20:18:07

+0

我正在使用5.5.29。在tableB上我有'CONSTRAINT cname FOREIGN KEY(idA)REFERENCES tableA(id)ON DELETE CASCADE ON UPDATE CASCADE,' – Lorenz 2013-03-06 20:27:54

+0

@landons:在手册中明确指出,情况并非如此。 – 2013-03-06 20:28:18

回答

8

如果删除是由外键引起的,不会引发触发器。

From the manual

触发器目前不被外键的动作激活。

+0

_E.1。对存储程序的限制_那里我没有搜索...谢谢。 – Lorenz 2013-03-06 20:32:10

+1

我必须问:推荐的解决方案是什么?我必须在使用外键删除期间启动触发器。我应该添加额外的触发器来删除而不是使用外键吗? – boreq 2014-03-05 00:02:46