MySQL流程控制的使用

前端之家收集整理的这篇文章主要介绍了MySQL流程控制的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_403_0@流程控制语句,用于将多个sql语句,划分或组成成符合业务逻辑的代码

<h3 id="流程控制语句">流程控制语句

@H_403_0@包括,IF语句、CASE语句、LOOP语句、WHILE语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句

@H_403_0@每个流程中,可能包含一个单独语句,也可以是使用BEGIN……END构造的复合语句,可以嵌套

<h3 id="if语句">IF语句

@H_403_0@IF语句,是指如果满足某种条件,根据判断的结果为TRUE,或者FALSE执行相应的语句

<h3 id="语法格式">语法格式

@H_403_0@IF expr_condition THEN statement_list
[ELSEIF expr_condition THEN statement_list]
[ELSE statement_list]
END IF
IF实现了一个基本的条件构造

<h3 id="参数说明">参数说明

@H_403_0@Expr_condition,表示判断条件
Statement_list,表示sql语句列表,它可以包括一个或多个语句

@H_403_0@如果,expr_condition求值为TRUE,相应的sql语句列表就会被执行,如果,没有expr_condition匹配,则ELSE子句李的语句列表被执行

@H_403_0@注意,MysqL中还有一个IF()函数,不同于这里的IF语句
IF val IS NULL
THEN SELECT ‘val is NULL’;
ELSE SELECT ‘val is not NULL’;
END IF;
判断val值是否为空
如果,val值为空,输出字符串val is NULL,否则,输出字符串val is not NULL
注意,IF语句都需要使用END IF来结束,不可省略

<h3 id="case语句">CASE语句

@H_403_0@另一个进行条件判断的语句,该语句有两种语句格式

<h3 id="第一种格式">第一种格式

@H_403_0@CASE case_expr
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]……
[ELSE statement_list]
END CASE

<h3 id="参数说明-1">参数说明

@H_403_0@Case_expr,表示条件判断的表达式,决定了哪一个WHEN自己会被执行
When_value,表示表达式可能的值,如果,某个when_value表达式与case_expr表达式结果相同,则执行对应THEN关键字后的statement中的语句
Statement_list,表示不同when_value值的执行语句

@H_403_0@使用CASE流程控制语句,第一种格式,判断val值等于1、等于2,或者两者都不等于
CASE val
WHEN 1 THEN SELECT ‘val is 1’;
WHEN 2 THEN SELECT ‘val is 2’;
ELSE SELECT ‘val is not 1 or 2’;
END CASE;

@H_403_0@当val值为1时,输出字符串val is 1
当val值为2时,输出字符串val is 2
否则,输出字符串val is not 1 or 2

<h3 id="第二种格式">第二种格式

@H_403_0@CASE
WHEN expr_condition THEN statement_list
[WHEN expr_condition THEN statement_list]
[ELSE statement_list]
END CASE;

@H_403_0@注意,这里存储过程中的CASE语句,与控制流程函数中的sql CASE表达式中的CASE是不同的
存储过程中,CASE语句不能有ELSE NULL子句,并且,用END CASE代替END来终止

<h3 id="loop语句">LOOP语句

@H_403_0@LOOP循环语句,用来重复执行某些语句
与IF和CASE语句相比,LOOP只是创建一个循环操作的过程,并不进行条件判断
LOOP内的语句一直重复执行,知道跳出循环语句

<h3 id="语法格式-1">语法格式

@H_403_0@[loop_label:] LOOP
Statement_list
END LOOP [loop_label]

<h3 id="参数说明-2">参数说明

@H_403_0@Loop_label,表示LOOP语句的标注名称,该参数可以省略
Statement,表示需要循环执行的语句

@H_403_0@使用LOOP 语句进行循环操作
DECLARE id INT DEFAULT 0;
Add_loop:LOOP
SET id=id+1;
IF id>=10 THEN LEAVE add_loop;
END IF;
END LOOP add_loop;

@H_403_0@循环执行了id加1的操作
当id值小于10时,循环重复执行,当id值大于或者等于10时,使用LEAVE语句退出循环

<h3 id="leave语句">LEAVE语句

@H_403_0@用于退出任何被标注的流程控制结构

<h3 id="语法格式-2">语法格式

@H_403_0@LEAVE label

<h3 id="参数说明-3">参数说明

@H_403_0@label,表示循环的标志
通常情况下,LEAVE语句与BEGIN……END、循环语句一起使用
ITERATE,意思是再次循环

<h3 id="iterate语句">ITERATE语句

@H_403_0@用于将执行顺序转到语句段的开头处

<h3 id="语法格式-3">语法格式

@H_403_0@ITERATE lable

<h3 id="参数说明-4">参数说明

@H_403_0@Lable,表示循环的标志
注意,ITERATE语句只可以出现在,LOOP、REPEAT和WHILE语句中

@H_403_0@演示ITERATE语句,在LOOP语句内的使用
CREATE PROCEDURE doiterate()
BEGIN
DECLARE p1 INT DEFAULT 0;
My_loop:LOOP
SET p1=p1+1;
IF p1<10 THEN ITERATE my_loop;
ELSEIF p1>20 THEN LEAVE my_loop;
END IF;
SELECT ‘p1 is between 10 and 20’;
END LOOP my_loop;
END

@H_403_0@P1的初始值为0,如果,p1的值小于10时,重复执行p1加1的操作,当p1大于或等于10,并且小于20时,打印消息p1 is between 10 and 20,当p1大于20时,退出循环

<h3 id="repeat语句">REPEAT语句

@H_403_0@用于创建一个带有条件判断的循环过程
每次语句执行完毕之后,会对条件表达式进行判断,如果表达式为真,则循环结束,否则,重复执行循环中的语句

<h3 id="语法格式-4">语法格式

@H_403_0@[repeat_lable:] REPEAT
Statement_list
UNTIL expr_condition
END REPEAT [repeat_lable]

<h3 id="参数说明-5">参数说明

@H_403_0@Repeat_lable,为REPEAT语句的标注名称,该参数是可选的
REPEAT语句内的语句,或语句群被重复,直至expr_condition为真

@H_403_0@使用REPEAT语句,执行循环过程
DECLARE id INT DEFAULT 0;
REPEAT
SET id=id+1;
UNTIL id>=10;
END REPEAT;

<h3 id="while语句">WHILE语句

@H_403_0@创建一个带条件判断的循环过程
与REPEAT不同的是,WHILE在语句执行时,先对指定的条件进行判断,如果为真,则执行循环内的语句,否则退出循环

<h3 id="语法格式-5">语法格式

@H_403_0@[while_lable:] WHILE expr_condition DO
Statement_list
END WHILE [while_lable]

<h3 id="参数说明-6">参数说明

@H_403_0@While_lable,为WHILE语句的标注名称
Expr_condition,为进行判断的表达式,如果表达式为真,WHILE语句内的语句,或语句群就被执行,直至expr_condition为假,退出循环

@H_403_0@使用WHILE语句,进行循环操作
DECLARE i INT DEFAULT 0;
WHILE i<10 DO
SET i=i+1;
END WHILE;

猜你在找的MySQL相关文章