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;