MySQL 儲存過程中事務sql異常回滾

markzy5201190發表於2013-10-30
@@如下適用DML操作,在基礎上改寫適合的自己的需求;
Procedure as following:

DROP PROCEDURE IF EXISTS sp_tx_ios_proc;
CREATE PROCEDURE sp_tx_ios_proc()
BEGIN
#--------------------
#SQLEXCEPTION 對應儲存過程執行中所有異常
#@Auth:
#@time:
#--------------------
#標誌是否出錯
DECLARE errno TINYINT DEFAULT '0';
#如sql異常,將errno設定為1且後續執行退出
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK;SET errno = 1; END;

#開啟事務
START TRANSACTION;
INSERT INTO tx(a,b)VALUES(1,1),(2,2),(3,3); #執行
INSERT INTO tx(a,b)VALUES(1,2); #因約束,全部回滾
#errno為1,事務回滾sql
SELECT errno;

END;
table:
create table tx(
a int,
b int,
unique key idx_a(a)
)engine =InnoDB deafult charset = utf8;

call sp_tx_ios_proc();

若有更好的回滾機制,請share ^_^

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-775373/,如需轉載,請註明出處,否則將追究法律責任。

相關文章