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的资料

      

原文地址:https://www.cnblogs.com/startlearn/p/4935826.html