mysql流程控制语句有哪些
在MySQL中,常见的过程式SQL语句可以用在一个存储过程体中。
其中包括:IF语句、CASE语句、LOOP语句、WHILE语句、REPEAT语句、LEAVE语句和ITERATE语句,它们可以进行流程控制。
1、IF语句
IF语句用来进行条件判断,根据不同的条件执行不同的操作。
该语句在执行时首先判断IF后的条件是否为真,则执行THEN后的语句,如果为假则继续判断IF语句直到为真为止,当以上都不满足时则执行ELSE语句后的内容。
IF语句表示形式如下:
1 2 3 4 5 6 7 | IF condition THEN
...
ELSE condition THEN
...
ELSE
...
END IF
|
示例:使用IF语句用来进行条件判断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | CREATE PROCEDURE example_if ( IN x INT )
BEGIN
IF x = 1 THEN
SELECT 1;
ELSEIF x = 2 THEN
SELECT 2;
ELSE
SELECT 3;
END IF;
END ;
CALL example_if(2);
|
2、CASE语句
CASE语句为多分支语句结构,该语句首先从WHEN后的VALUE中查找与CASE后的VALUE相等的值,如果查找到则执行该分支的内容,否则执行ELSE后的内容。
CASE语句表示形式如下:
1 2 3 4 5 | CASE value
WHEN value THEN ...
WHEN value THEN ...
ELSE ...
END CASE
|
CASE语句另一种语法表示形式如下:
1 2 3 4 5 | CASE
WHEN value THEN ...
WHEN value THEN ...
ELSE ...
END CASE
|
示例:使用CASE语句用来进行条件判断。
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE PROCEDURE example_case( IN x INT )
BEGIN
CASE x
WHEN 1 THEN SELECT 1;
WHEN 2 THEN SELECT 2;
ELSE SELECT 3;
END CASE ;
END ;
CALL example_case(5);
|
3、WHILE循环语句
WHILE循环语句执行时首先判断condition条件是否为真,如果是则执行循环体,否则退出循环。
该语法表示形式如下:
1 2 3 | WHILE condition DO
...
END WHILE;
|
示例:使用WHILE循环语句执行求前100的和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CREATE PROCEDURE example_while( OUT sum INT )
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;
WHILE i <= 100 DO
SET s = s+i;
SET i = i+1;
END WHILE;
SET sum = s;
END ;
CALL example_while(@ sum );
SELECT @ sum ;
|
4、LOOP循环语句
LOOP循环没有内置的循环条件,但可以通过LEAVE语句退出循环。
LOOP语句表示形式如下:
LOOP语句允许某特定语句或语句群的重复执行,实现一个简单的循环构造,在循环内的语句一直重复直至循环被退出,退出循环应用LEAVE语句。
LEAVE语句经常和BEGIN...END或者循环一起使用,其表示形式如下:
label是语句中标注的名字,这个名字是自定义的。
示例:使用LOOP循环语句求前100的和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | CREATE PROCEDURE example_loop( OUT sum INT )
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;
loop_label:LOOP
SET s = s+i;
SET i = i+1;
IF i>100 THEN
LEAVE loop_label;
END IF;
END LOOP;
SET sum = s;
END ;
CALL example_loop(@ sum );
SELECT @ sum ;
|
5、REPEAT循环语句
REPEAT循环语句先执行一次循环体,之后判断condition条件是否为真,则退出循环,否则继续执行循环。
REPEAT语句表示形式如下:
1 2 3 4 | REPEAT
...
UNTIL condition
END REPEAT
|
示例:使用REPEAT循环语句求前100的和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CREATE PROCEDURE example_repeat( OUT sum INT )
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;
REPEAT
SET s = s+i;
SET i = i+1;
UNTIL i > 100
END REPEAT;
SET sum = s;
END ;
CALL example_repeat(@ sum );
SELECT @ sum ;
|
6、ITERATE语句
ITERATE语句可以出现在LOOP、REPEAT和WHILE语句内,其意为“再次循环”。
语句格式如下:
该语句的格式与LEAVE大同小异,区别在于:LEAVE语句是离开一个循环,而ITERATE语句是重新开始一个循环。
示例:求10以内奇数值的和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | CREATE PROCEDURE example_iterate( OUT sum INT )
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE s INT DEFAULT 0;
loop_label:LOOP
SET i = i+1;
IF i > 10 THEN
LEAVE loop_label;
END IF;
IF (i mod 2) THEN
SET s = s+i;
ELSE
ITERATE loop_label;
END IF;
END LOOP;
SET sum = s;
END ;
CALL example_iterate(@ sum );
SELECT @ sum ;
|