• mySql 事务,游标以及循环


    对于Mysql 我也是个初学者,在这里就写写我知道的皮毛,若有错误直管拍砖,我也好学习学习,先谢过!

    首先 mysql 没有 Sql sever 一样的 begin try     begin tran  处理语句   commit tran  end try begin catch   rollback   tran  end catch 。mysql  的事务机制 我理解就是捕捉错误句柄,如果存在就应该rollback,不存在就可以commit.不废话上代码:

     1 DECLARE sys_error INT DEFAULT 0; //定义一个表示出错返回的错误变量
     2 
     3  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET sys_error=1;  //定义设置如果有错误句柄 就将 sys_error 设置为1
     4 
     5  START TRANSACTION; //开始事务
     6 
     7 
     8 /* 写处理逻辑的语句 */
     9 
    10    IF sys_error=1 THEN        
    11         ROLLBACK; //有错误回滚
    12         ELSE    
    13         COMMIT; //没有错误提交
    14         END IF;       

    下面说下 mysql 的游标和循环

    其实游标也是循环的读取数据所以我下面就是说下循环的问题

    Mysql 的循环是否结束其实也是通过标记的,什么意思我举个例子 当我们有两层循环(嵌套) 

    一般 是:

         DECLARE  i INT DEFAULT 1;
         DECLARE  j  INT DEFAULT 1;   
         WHILE i<5
         DO 
            BEGIN
    SET j=1; WHILE j<4 DO BEGIN SELECT i,j; SET j=j+1; END ; END WHILE; SET i=i+1; END ; END WHILE;

      这样 只执行了  i=1,J=1,2,3 的结果  i=2 后面的都没有执行

    mysql 中的循环是通过状态句柄控制的,跟事务的类似,不废话了上代码

      

         DECLARE Done INT DEFAULT 0;
         DECLARE  i INT DEFAULT 1;
         DECLARE  j  INT DEFAULT 1; 
         DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1; //个人理解就是循环结束了就设置成1了,就像sql 里游标读取状态(@@FETCH_STATUS )至于 02000 我只能猜是循环有关的状态码。
         WHILE i<5
         DO 
            BEGIN
                SET j=1;
                 WHILE j<4
                 DO 
                   BEGIN
                      SELECT i,j;
                      SET j=j+1;
                   END ;
                 END WHILE;  
                 SET i=i+1;              
                 SET Done =0;  //如果少这一步,外层循环也会直接退出 就是会像上面的结果一样。    
            END ;
         END WHILE; 
    

      好了大概就讲这些,还有一个就是在mysql 的局部变量和全局变量,特别是用户第三方的mysql 工具客户端,在客户端一样没有断开的情况下,全局变量一直保存着原来的值。具体说法可以去找mysql的资料

          

  • 相关阅读:
    StarUML
    第二周周二日报
    第二周周一日报
    第一周周末报
    第一周周四日报
    第一周第三天日报
    软件开发总结
    构建之法总结
    《构建之法》第六章
    个人日志7
  • 原文地址:https://www.cnblogs.com/startlearn/p/4935826.html
Copyright © 2020-2023  润新知