MySQL循環語句(包括WHILE
,REPEAT
和LOOP
)來根據條件反覆運行代碼塊。mysql
MySQL提供循環語句,容許您根據條件重複執行一個SQL代碼塊。 MySQL中有三個循環語句:WHILE
,REPEAT
和LOOP
。sql
咱們將在如下部分中更詳細地檢查每一個循環語句。express
WHILE
語句的語法以下:oop
WHILE expression DO statements END WHILE
WHILE
循環在每次迭代開始時檢查表達式。 若是expression爲TRUE
,MySQL將執行WHILE
和END WHILE
之間的語句,直到expression爲FALSE
。 WHILE
循環稱爲預先測試條件循環,由於它老是在執行前檢查語句的表達式。測試
下面的流程圖說明了WHILE
循環語句:spa
如下是在存儲過程當中使用WHILE
循環語句的示例:code
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
存儲過程當中:blog
str
字符串,直到x
變量的值大於5
。要注意,若是不初始化x
變量的值,那麼它默認值爲NULL
。 所以,WHILE
循環語句中的條件始終爲TRUE
,而且您將有一個不肯定的循環,這是不可預料的。字符串
下面來測試test_mysql_while_loopstored
調用存儲過程:it
CALL test_mysql_while_loop();
執行上面查詢語句,獲得如下結果
mysql> CALL test_mysql_while_loop(); +------------+ | str | +------------+ | 1,2,3,4,5, | +------------+ 1 row in set Query OK, 0 rows affected
REPEAT
循環語句的語法以下:
REPEAT statements; UNTIL expression END REPEAT
首先,MySQL執行語句,而後評估求值表達式(expression
)。若是表達式(expression
)的計算結果爲FALSE
,則MySQL將重複執行該語句,直到該表達式計算結果爲TRUE
。
由於REPEAT
循環語句在執行語句後檢查表達式(expression
),所以REPEAT
循環語句也稱爲測試後循環。
下面的流程圖說明了REPEAT
循環語句的執行過程:
咱們可使用REPEAT
循環語句重寫test_mysql_while_loop
存儲過程,使用WHILE
循環語句:
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
表達式中沒有分號(;
)。
執行上面查詢語句,獲得如下結果
mysql> CALL mysql_test_repeat_loop(); +------------+ | str | +------------+ | 1,2,3,4,5, | +------------+ 1 row in set Query OK, 0 rows affected
有兩個語句容許您用於控制循環:
LEAVE
語句用於當即退出循環,而無需等待檢查條件。LEAVE
語句的工做原理就相似PHP,C/C++
,Java等其餘語言的break
語句同樣。ITERATE
語句容許您跳過剩下的整個代碼並開始新的迭代。ITERATE
語句相似於PHP
,C/C++
,Java
等中的continue
語句。MySQL還有一個LOOP
語句,它能夠反覆執行一個代碼塊,另外還有一個使用循環標籤的靈活性。
如下是使用LOOP
循環語句的示例。
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;
2
,4
,6
等。LOOP
語句以前放置一個loop_label
循環標籤。x
的值大於10
,則因爲LEAVE
語句,循環被終止。x
的值是一個奇數,ITERATE
語句忽略它下面的全部內容,並開始一個新的迭代。x
的值是偶數,則ELSE
語句中的塊將使用偶數構建字符串。執行上面查詢語句,獲得如下結果
mysql> CALL test_mysql_loop(); +-------------+ | str | +-------------+ | 2,4,6,8,10, | +-------------+ 1 row in set Query OK, 0 rows affected