跳至主要內容

MySQL流程控制语句

大约 3 分钟约 836 字

在MySQL中,常见的过程式SQL语句可以用在一个存储过程体中,其中就包含IF语句、CASE语句、WHILE语句、LOOP语句、REPEAT语句、LEAVE语句和ITERATE语句,它们可以进行流程控制。

定义一个存储过程体的模板是:

delimiter 结束符号
create procedure 存储过程体名(in/out 变量名 变量类型)
begin
存储过程体
end
结束符号

其中,结束符号一般使用“//”,它作为调用此存储过程体的结束标志。

存储过程体名要是MySQL中有效的标识符,in/out表示调用此存储过程体时输入还是输出。

IF语句

IF语句可以用来进行条件判断,根据条件的真假执行不同的操作。

IF语句的表示形式如下:

IF condition THEN
...
[ELSEIF condition THEN]
...
[ELSE]
...
END IF

其中,condition表示判断条件。如:

delimiter //
create procedure example_if(in x int)
begin
if x=1 then select 1;
elseif x=2 then select 2;
else select 'other';
end if;
end
//
运行结果
运行结果

CASE 语句

CASE语句为多分支语句,该语句首先从WHEN后的VALUE中查找与CASE后的VALUE相等的值,如果查找到则执行该分支的语句,否则执行ELSE后面的内容。

CASE语句的语法如下:

CASE value
WHEN value THEN...
[WHEN value THEN ...]
[ELSE ...]
END CASE

其中,value表示条件判断的变量,WHEN后面的value表示变量的取值。如:

delimiter //
create procedure example_case(in x int)
begin
case x
when 1 then select 1;
when 2 then select 2;
else select 'other';
end case;
end
//
运行结果
运行结果

WHILE语句

WHILE语句执行时首先判断condition条件是否为真,如果为真则执行循环,否则退出循环。

WHILE语句的语法如下:

WHILE condition DO
...
END WHILE;

其中condition表示判断的条件。如

delimiter //
create procedure example_while(in x int)
begin
while x<=5 do
select x;
set x = x+1;
end while;
end
//
运行结果
运行结果

LOOP 语句

LOOP语句没有循环条件,但是可以通过LEAVE语句退出循环。

LOOP语句的语法如下:

label:loop
...
end loop;

LOOP允许某特定语句或语句群的重复执行,实现一个简单的循环构造,中间省略的部分是要重复执行的语句,退出循环用LEAVE语句,语法为LEAVE label

如:

delimiter //
create procedure example_loop(in x int)
begin
label:loop
if x>5 then leave label;
end if;
select x; 
set x = x+1;
end loop;
end
//
运行结果
运行结果

REPEAT语句

REPEAT语句是先执行一个循环体,之后判断condition条件是否为真,为真则退出循环,否则继续执行循环。

REPEAT语句的语法如下:

REPEAT
...
UNTIL condition
END REPEAT

如:

delimiter //
create procedure example_repeat(in x int)
begin
repeat
select x;
set x = x+1;
until x=5
end repeat;
end
//
运行结果
运行结果

在一个循环中继续循环

使用关键字ITERATE跳过本次循环,在LOOP,REPEAT和WHILE语句中很常用。使用ITERATE label跳过本次循环。

如:

delimiter //
create procedure example_iterate(in x int)
begin
label:while x<5 do
set x = x+1;
select x;
if x=3 then iterate label;
end if;
end while;
end //
运行结果
运行结果

终止循环:使用关键字LEAVE,语法是leave label,其中label表示为循环指定的标签。

上次编辑于:
贡献者: 棋.