MYSQL 巢狀事務(SAVEPOINT) 與Spring 事務傳播
阿新 • • 發佈:2019-07-20
摘要
savepoint 關鍵字可以實現巢狀事務。結合savepoint關鍵字,更方便理解spring的事務傳播。
事務巢狀
初始化表指令碼
drop table t;
create table t(a int, primary key(a));
開啟事務
mysql事務預設是自動提交的。通過下面的命令關閉事務自動提交。(mysql事務特性是基於同一個連結,不同的連結沒有事務關係,所以在測試的時候,保證是同一個視窗)
set @@autocommit = 0;
select @@autocommit;
區域性事務,外部事務都正常提交
-- 開啟事務 begin; insert into t(a) values(1); -- SAVEPOINT s; insert into t(a) values(2); RELEASE SAVEPOINT s; commit;
查詢結果,1和2都插入成功了。
select * from t;
區域性事務回滾,外部事務提交
begin;
insert into t(a) values(1);
SAVEPOINT s;
insert into t(a) values(2);
ROLLBACK to SAVEPOINT s;
commit;
這裡區域性事務回滾了,整體事務提交,查詢結果,只有1插入成功,2沒有插入,表示外部事務提交了,區域性事務回滾了。
select * from t;
區域性事務提交,外部事務回滾
begin; insert into t(a) values(1); SAVEPOINT s; insert into t(a) values(2); RELEASE SAVEPOINT s; ROLLBACK;
全域性事務回滾,整個事務都回滾了,1和2都沒有插入成功
select * from t;
區域性事務回滾,外部事務回滾
這個很明顯,1和2都不能插入成功。