1
我在Mysql 5.5版本中实现了一个典型的“审计日志”触发器。我使用AFTER INSERT将表用户的插入行复制到我的'audit_log'表中。在原始事务回滚之后,Mysql触发器插入仍然存在
因此,对于这个顺序:
BEGIN;
insert into user (name) values ('joe');
<--trigger fires, adds new row to audit_log table-->
COMMIT;
然后我得到了 'AUDIT_LOG' 与 '乔' 新行。大。
但是,即使触发触发器的插入操作被其封闭事务中止,我的触发器的结果似乎也应用了。
因此,对于这个顺序:
BEGIN;
insert into user (name) values ('mary');
<--trigger fires, adds new row to audit_log table-->
ROLLBACK;
我仍然在AUDIT_LOG新行“玛丽”,这指的是从来没有承诺我的用户表中的数据结束了。这似乎很明显是错误的。
看来在Postgres中执行的触发更新在原始事务中执行,这是我期望发生的事情。任何人都有这在MySQL的经验?也许有一个设置我错了?
我注意到this question意味着所有更新都发生在原始事务中。但是,答案指的是触发器上的Mysql手册页,实际上根本没有提到“转换”。
我刚刚在MySQL 5.5中做了一个快速测试,触发器似乎回滚了。你使用的是什么版本的MySQL? – Steve 2013-03-27 21:20:47
mysql通常在事务中支持触发器。请参阅http://stackoverflow.com/questions/13823165/mysql-trigger-with-transaction-insert-or-update – didierc 2013-03-27 21:38:47
嗯..我当然不是在试图避免交易。我会尝试创建一个更有限的测试用例。 – 2013-03-28 22:06:29