在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的区别:

mysql条件运算条件 mysql条件控制语句_mysql条件运算条件

注:delimiter后边的$$是设置的结束符号

mysql条件运算条件 mysql条件控制语句_控制结构_02

注:delimiter  ;  (delimiter 和分号件有空格,表示将语句的结束符号恢复为分号)

mysql条件运算条件 mysql条件控制语句_mysql_03

从判断的条件上看,初始值都是满足退出循环的条件的,但是REPEAT循环仍然执行了一次以后才退出循环的,而WHILE循环则一次都没有执行。

位置:
只能放在begin end中

特点:都能实现循环结构

对比:

1.这三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或iterate)则必须添加名称
2.
loop 一般用于实现简单的死循环
while 先判断后执行
repeat 先执行后判断,无条件至少执行一次

二、循环控制语句
leave:类似于break,用于跳出所在的循环
iterate:类似于continue,用于结束本次循环,继续下一次

本文部分内容和例子参考了书籍《深入浅出mysql数据库开发、优化与管理维护(第2版)》作者:黄潇等