MySql使用存储过程实现事务的提交或者回滚

 1 DELIMITER $$  
 2 DROP PROCEDURE IF EXISTS  test_sp1 $$  
 3 CREATE PROCEDURE test_sp1( )  
 4  BEGIN  
 5     DECLARE t_error INTEGER DEFAULT 0;  
 6     DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  
 7   
 8         START TRANSACTION;  
 9             UPDATE `testdb`.`t_student` SET `stu_name` = '哈哈9' WHERE `id` = 9;
10             UPDATE `testdb`.`t_student` SET `stu_name` = '哈哈10' WHERE `id` = 10;
11             UPDATE `testdb`.`t_student` SET `stu_name` = '哈哈11' WHERE `id` = 11;
12         IF t_error = 1 THEN  
13             ROLLBACK;  
14         ELSE  
15             COMMIT;  
16         END IF;  
17         SELECT t_error;
18  END$$ 
19 CALL test_sp1( );

说明 :

DELIMITER $$ 使用DELIMITER关键字来重新定义命令结束符,默认的命令结束符为分号';'(也就是原先是键入;之后再回车,命令会执行,现在是键入$$之后命令会执行)

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  创建一个sql异常处理器,只要发生异常就将t_error的值置为1
START TRANSACTION;    开启事务  (在存储过程中只能使用start transaction来开启事务,不能使用begin,因为mysql会自动将begin识别为begin...end)

IF t_error = 1 THEN 
ROLLBACK; ELSE COMMIT; END IF; 通过判断t_error的值来看是否发生过sql异常,从而来决定是提交事务还是来回滚事务
SELECT t_error;    查看t_error的值
CALL test_sp1( );  调用刚刚定义的存储过程 
 
 
 
posted @ 2015-12-18 16:07  wangliyue  阅读(5000)  评论(0编辑  收藏  举报