标签:
对于Mysql 我也是个初学者,在这里就写写我知道的皮毛,若有错误直管拍砖,我也好学习学习,先谢过!
首先 mysql 没有 Sql sever 一样的 begin tran end tran begin catch 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的资料
标签:
原文地址:http://www.cnblogs.com/startlearn/p/4935826.html