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