zoukankan      html  css  js  c++  java
  • 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( );  调用刚刚定义的存储过程 
     
     
     
  • 相关阅读:
    Windows系统环境变量path优先级测试报告
    URI和URL的区别
    智能引导式报错(Class file name must end with .class)
    【Algorithm】冒泡排序
    【C语言】练习2-9
    【C语言】练习2-8
    【C语言】练习2-1
    【C语言】练习1-23
    【C语言】练习1-22
    【C语言】练习1-21
  • 原文地址:https://www.cnblogs.com/wangliyue/p/5057358.html
Copyright © 2011-2022 走看看