在mysql应用中,可以使用IF、CASE、LOOP、 LEAVE 、ITERATE 、REPEAT 以及 WHILE语句进行流程的控制。
一、分支结构
1.1 IF语句
功能:IF实现条件判断,可以实现简单的分支流程控制,满足不同条件执行不同的语句。
具体语法:
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list]
[ELSE statement_list]
END IF
通用语句:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
else 语句n;
end if;
IF语句可以放的位置:只能放在begin end中
补充:IF对应的有IF函数,语法:IF(条件,值1,值2 位置:可以作为表达式放在任何位置
1.2 CASE语句
CASE实现比IF语句更复杂的条件分支。
具体语法:
语法1:
CASE case_value
WHEN when_value THEN
statement_list
[WHEN when_value THEN
statement_list]...
[ELSE statement_list]
END [CASE]
通用语句:
case 表达式或字段
when 值1 then 语句1;
when 值2 then 语句2;
..
else 语句n;
end [case];
语法2:
CASE
WHEN search_condition THEN
statement_list
[WHEN search_condition THEN
statement_list]...
[ELSE statement_list]
END CASE
通用语句:
case
when 条件1 then 语句1;
when 条件2 then 语句2;
..
else 语句n;
end [case];
位置:可以放在任何位置,
如果放在begin end 外面,作为表达式结合着其他语句使用
如果放在begin end 里面,一般作为独立的语句使用
二、循环结构
2.1 LOOP语句
功能:LOOP一般用于实现简单的死循环,退出循环的条件需要使用其他的语句定义,通常可以使用LEAVE语句实现。
具体语法:
[begin_lavel:]LOOP
statement_list
END LOOP[end_label]
如果不在statement_list中添加退出条件,则循环为死循环。
通用语句:
[名称:]loop
循环体
end loop 【名称】;
如果要退出循环,则可以配合leave语句使用。
例如:循环100次向actor表中插入记录,当插入100条记录后,退出循环;
CREATE PROCEDURE
award_insert()
BEGIN
set @x=0;
ins:LOOP
set @x=@x + 1;
IF @x =100 THEN
LEAVE ins;
END IF;
INSERT INTO
award(username,password)VALUES
('Test','201');
END LOOP ins;
END;
$$
ITERATE语句必须用在循环中,用于跳过当前循环的剩下语句。直接进入下一轮循环。
CREATE PROCEDURE
award_insert()
BEGIN
set @x=0;
ins:LOOP
set @x=@x + 1;
IF @x =1 THEN
LEAVE ins;
ELSEIF mod(@x,2)=0 THEN
ITETATE ins;
END IF;
INSERT INTO
award(id,username,password)VALUES
(@x+2,'Test',@x);
END LOOP ins;
END;
$$
2.2 WHILE语句
功能:WHILE语句实现是也是有田间的循环控制语句,即当满足条件时执行循环的内容,
具体语法:
[begin_lavel:]WHILE
search_condition DO
statement_list
END WHILE[end_label]
通用语句:
【名称:】while 循环条件 do
循环体
end while 【名称】;
2.3 REPEAT语句
功能:有条件的循环控制邮局,当满足条件的时候退出循环
具体语法:
[begin_lavel:]REPEAT
statement_list
UNTIL search_condition
END REPEAT[end_label]
通用语句:
【名称:】repeat
循环体
until 结束条件
end repeat 【名称】;
小结:
WHILE 循环和REPEAT循环的区别在于:WHILE是满足条件才执行循环,REPEAT是满足条件退出循环;WHILE在首次循环执行之前就判断条件,所以循环最少执行0次,而REPEAT是在首次执行之后才判断条件,所以循环最少执行1次。
举例比较WHILE与REPEAT的区别:
注:delimiter后边的$$是设置的结束符号
注:delimiter ; (delimiter 和分号件有空格,表示将语句的结束符号恢复为分号)
从判断的条件上看,初始值都是满足退出循环的条件的,但是REPEAT循环仍然执行了一次以后才退出循环的,而WHILE循环则一次都没有执行。
位置:
只能放在begin end中
特点:都能实现循环结构
对比:
1.这三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或iterate)则必须添加名称
2.
loop 一般用于实现简单的死循环
while 先判断后执行
repeat 先执行后判断,无条件至少执行一次
二、循环控制语句
leave:类似于break,用于跳出所在的循环
iterate:类似于continue,用于结束本次循环,继续下一次
本文部分内容和例子参考了书籍《深入浅出mysql数据库开发、优化与管理维护(第2版)》作者:黄潇等