mysql實(shí)現(xiàn)事務(wù)的提交和回滾實(shí)例
mysql創(chuàng)建存儲(chǔ)過程的官方語法為:
START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}
我這里要說明的mysql事務(wù)處理多個(gè)SQL語句的回滾情況。比如說在一個(gè)存儲(chǔ)過程中啟動(dòng)一個(gè)事務(wù),這個(gè)事務(wù)同時(shí)往三個(gè)表中插入數(shù)據(jù),每插完一張表需要判斷其是否操作成功,如果不成功則需要回滾,最后一張表判斷其插入成功之后commit。這里需要注意的是不能直接使用事務(wù)的collback,這樣是不能實(shí)現(xiàn)回滾的或者說可能出現(xiàn)意外的錯(cuò)誤。
那么我們需要的是一個(gè)條件判斷,比如loop,因?yàn)镸ySql默認(rèn)是會(huì)自動(dòng)提交的,所以我們不用擔(dān)心rollback之后條件退出而沒有commit。
具體mysql語句如下:
begin
loop_lable: loop
start transaction;
insert into table1(f_user_id) values(user_id);
if row_count() < 1 then
set @ret = -1;
rollback;
leave loop_label;
end if;
insert into table2(f_user_id) values(user_id);
if row_count() < 1 then
set @ret = -1;
rollback;
leave loop_label;
end if;
insert into table3(f_user_id) values(user_id);
if row_count() < 1 then
set @ret = -1;
rollback;
leave loop_label;
else
set @ret = 0;
commit;
leave loop_label;
end if;
end loop;
select @ret;
end
相關(guān)文章
MySQL實(shí)戰(zhàn)記錄之如何快速定位慢SQL
這可能是困然很多人的一個(gè)問題,MySQL通過慢查詢?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的SQL語句,下面這篇文章主要給大家介紹了關(guān)于MySQL實(shí)戰(zhàn)記錄之如何快速定位慢SQL的相關(guān)資料,需要的朋友可以參考下2022-03-03Mysql主從同步Last_IO_Errno:1236錯(cuò)誤解決方法
最近遇到Mysql主從同步的Last_IO_Errno:1236錯(cuò)誤問題,然后在網(wǎng)上查找相關(guān)解決方案,這里分享給大家,供參考。2017-10-10