mysql-------流程控制结构

在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版)》作者:黄潇等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值