首页 > 数据库技术 > 详细

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

时间:2015-12-18 18:03:14      阅读:216      评论:0      收藏:0      [点我收藏+]
 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( );  调用刚刚定义的存储过程 
 
 
 

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

原文:http://www.cnblogs.com/wangliyue/p/5057358.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!