標籤:
對於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的資料
mySql 事務,遊標以及迴圈