对于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 设置为14
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的资料