本文實例講述了mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法。分享給大家供大家參考,具體如下:
MySQL提供循環(huán)語句,允許我們根據條件重復執(zhí)行一個SQL代碼塊其中有三個循環(huán)語句:WHILE,REPEAT和LOOP,我們接下來分別看下。首先是WHILE語句來看下語法:
WHILE expression DO
statements
END WHILE
WHILE循環(huán)在每次迭代開始時檢查表達式。 如果expressionevaluates為TRUE,MySQL將執(zhí)行WHILE和END WHILE之間的語句,直到expressionevaluates為FALSE。 WHILE循環(huán)稱為預先測試條件循環(huán),因為它總是在執(zhí)行前檢查語句的表達式。來看下流程圖:
完事咱們嘗試在存儲過程中使用WHILE循環(huán)語句,看個實例:
DELIMITER $$
DROP PROCEDURE IF EXISTS test_mysql_while_loop$$
CREATE PROCEDURE test_mysql_while_loop()
BEGIN
DECLARE x INT;
DECLARE str VARCHAR(255);
SET x = 1;
SET str = '';
WHILE x = 5 DO
SET str = CONCAT(str,x,',');
SET x = x + 1;
END WHILE;
SELECT str;
END$$
DELIMITER ;
在上面的test_mysql_while_loop存儲過程中,它的操作是先來重復構建str字符串,直到x變量的值大于5,完事使用select語句顯示最終的字符串。我們要注意的是,如果不初始化x變量的值,那么它默認值為NULL。 因此,WHILE循環(huán)語句中的條件始終為TRUE,并且我們將有一個不確定的循環(huán),這是不可預料的。廢話不多說,我們先來調用test_mysql_while_loopstored存儲過程:
CALL test_mysql_while_loop();
執(zhí)行上面查詢語句,得到以下結果:
mysql> CALL test_mysql_while_loop();
+------------+
| str |
+------------+
| 1,2,3,4,5, |
+------------+
1 row in set
Query OK, 0 rows affected
完事再來看REPEAT循環(huán)語句的語法結構:
REPEAT
statements;
UNTIL expression
END REPEAT
上述sql首先被mysql執(zhí)行,完事mysql會評估求值表達式(expression),如果表達式(expression)的計算結果為FALSE,則mysql將重復執(zhí)行該語句,直到該表達式計算結果為TRUE。因為REPEAT循環(huán)語句在執(zhí)行語句后檢查表達式(expression),因此REPEAT循環(huán)語句也稱為測試后循環(huán)。咱們來看下流程圖:
完事咱們再來使用REPEAT循環(huán)語句重寫test_mysql_while_loop存儲過程:
DELIMITER $$
DROP PROCEDURE IF EXISTS mysql_test_repeat_loop$$
CREATE PROCEDURE mysql_test_repeat_loop()
BEGIN
DECLARE x INT;
DECLARE str VARCHAR(255);
SET x = 1;
SET str = '';
REPEAT
SET str = CONCAT(str,x,',');
SET x = x + 1;
UNTIL x > 5
END REPEAT;
SELECT str;
END$$
DELIMITER ;
我們要注意的是UNTIL表達式中沒有分號(;)。執(zhí)行上面查詢語句,得到以下結果:
mysql> CALL mysql_test_repeat_loop();
+------------+
| str |
+------------+
| 1,2,3,4,5, |
+------------+
1 row in set
Query OK, 0 rows affected
最后咱們再來看一個使用LOOP循環(huán)語句的示例:
CREATE PROCEDURE test_mysql_loop()
BEGIN
DECLARE x INT;
DECLARE str VARCHAR(255);
SET x = 1;
SET str = '';
loop_label: LOOP
IF x > 10 THEN
LEAVE loop_label;
END IF;
SET x = x + 1;
IF (x mod 2) THEN
ITERATE loop_label;
ELSE
SET str = CONCAT(str,x,',');
END IF;
END LOOP;
SELECT str;
END;
上述sql具體作用如下:
- 以上存儲過程僅構造具有偶數字符串的字符串,例如2,4,6等。
- 在LOOP語句之前放置一個loop_label循環(huán)標簽。
- 如果x的值大于10,則由于LEAVE語句,循環(huán)被終止。
- 如果x的值是一個奇數,ITERATE語句忽略它下面的所有內容,并開始一個新的迭代。
- 如果x的值是偶數,則ELSE語句中的塊將使用偶數構建字符串。
執(zhí)行上面查詢語句,得到以下結果:
mysql> CALL test_mysql_loop();
+-------------+
| str |
+-------------+
| 2,4,6,8,10, |
+-------------+
1 row in set
Query OK, 0 rows affected
完事咱們再來看下控制循環(huán)的兩個關鍵詞:
- LEAVE語句用于立即退出循環(huán),而無需等待檢查條件。LEAVE語句的工作原理就類似PHP,C/C++,java等其他語言的break語句一樣。
- ITERATE語句允許您跳過剩下的整個代碼并開始新的迭代。ITERATE語句類似于PHP,C/C++,Java等中的continue語句。
好啦,本次記錄就到這里了。
更多關于MySQL相關內容感興趣的讀者可查看本站專題:《MySQL存儲過程技巧大全》、《MySQL常用函數大匯總》、《MySQL日志操作技巧大全》、《MySQL事務操作技巧匯總》及《MySQL數據庫鎖相關技巧匯總》
希望本文所述對大家MySQL數據庫計有所幫助。
您可能感興趣的文章:- MySQL select、insert、update批量操作語句代碼實例
- Python MySQLdb 執(zhí)行sql語句時的參數傳遞方式
- mysql創(chuàng)建表的sql語句詳細總結
- MySQL模糊查詢語句整理集合
- Mysql數據庫之常用sql語句進階與總結
- Mysql數據庫之sql基本語句小結
- 簡單了解mysql語句書寫和執(zhí)行順序