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( ); 调用刚刚定义的存储过程
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步