对于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的资料
时间: 2024-10-26 21:41:37