Mysql过程中局部事务回滚

 

label_pro: BEGIN
	
		DECLARE t_error INTEGER DEFAULT 0;
        
        declare CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;-- 异常时设置为1
				
		INSERT into temp VALUES('test', 'test');

		-- 测试第一段事务回滚
		START TRANSACTION;
        INSERT into temp VALUES('test2', 'test2');
        INSERT into aaaaa VALUES(2,3);  -- 制造异常
        IF t_error = 1 THEN
            ROLLBACK ;
        ELSE
            COMMIT;
        END IF;

		INSERT into temp VALUES('test3', 'test3');

		-- 测试第二段事务回滚
		START TRANSACTION;
        INSERT into temp VALUES('test4', 'test4');
        INSERT into aaaaa VALUES(2,3);
        IF t_error = 1 THEN
            ROLLBACK;
        ELSE
            COMMIT;
        END IF;

END

 

注意:只能使用continue,当遇到异常时,程序还会继续往下执行,才能执行到回滚事务那一步,若使用exit,过程将在异常处退出,也就无法回滚事务。

declare CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
declare exit HANDLER FOR SQLEXCEPTION SET t_error=1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值