MySQL存储过程中实现回滚
用存储过程处理复杂的业务时,可能涉及到对多张表格的操作,在任一个步骤出了问题,就需要对前面的操作回滚。举例实现:
1 DROP PROCEDURE IF EXISTS pro_test; 2 CREATE PROCEDURE pro_test 3 ( 4 para_a varchar(50), 5 para_b varchar(50) 6 ) 7 BEGIN 8 DECLARE result_code INTEGER DEFAULT 0; -- 定义返回结果并赋初值0 9 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET result_code=1; -- 在执行过程中出任何异常设置result_code为1 10 DECLARE CONTINUE HANDLER FOR NOT FOUND SET result_code = 2; -- 如果表中没有下一条数据则置为2 11 12 START TRANSACTION; -- 开始事务 13 14 /* 15 * 这里写具体的业务处理... 16 * 业务处理过程中可以根据实际情况自定义result_code 17 */ 18 19 IF result_code = 1 THEN -- 可以根据不同的业务逻辑错误返回不同的result_code,这里只定义了1和0 20 ROLLBACK; 21 ELSE 22 COMMIT; 23 END IF; 24 select result_code; 25 END ;