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 ;

 

posted @ 2016-10-26 16:11  阿龙阿  阅读(8941)  评论(0编辑  收藏  举报