我快速浏览了MySQL手册,但没有找到有关我的问题的确切信息。这是我的问题:如果我有一个InnoDB表A,其中两个触发器由“AFTER INSERT ON A”和“AFTER UPDATE ON A”触发。更具体地说,例如:一个触发器定义为:

CREATE TRIGGER test_trigger AFTER INSERT ON A
         FOR EACH ROW
                      BEGIN
                         INSERT INTO B SELECT * FROM A WHERE A.col1 = NEW.col1
                      END;

您可以忽略BEGINEND之间的查询,基本上,我的意思是此触发器将在表B中插入几行,该表B也是InnoDB表。

现在,如果我开始一个事务,然后将许多行(例如:10K行)插入表A。如果没有与表A关联的触发器,则所有这些插入都是原子的,这是肯定的。现在,如果表A与几个插入/更新触发器相关联,这些触发器将许多行插入/更新到表B和/或表C等。是否所有这些插入和/或更新仍然都是原子的?

我认为它仍然是原子的,但是有点难以测试,我在《手册》中找不到任何解释。任何人都可以确认吗?

最佳答案

从原子上说,您的意思是,如果触发器中的一条语句失败,则整个语句都会失败。是的-触发器是在语句的事务上下文中完成的。当然,如果没有事务,那么就没有事务上下文。



并且不允许您在触发器中启动事务。

关于MySQL事务和触发器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2634787/

10-11 05:20
查看更多