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