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( ); 调用刚刚定义的存储过程