在存储过程和自定义函数中可以使用流程控制语句来控制程序的流程。MySQL 中流程控制语句有:IF 语句、CASE 语句、LOOP 语句、LEAVE 语句、ITERATE 语句、REPEAT 语句和 WHILE 语句等。

下面将详细讲解这些流程控制语句。

1. IF语句

IF 语句用来进行条件判断,根据是否满足条件(可包含多个条件),来执行不同的语句,是流程控制中最常用的判断语句。其语法的基本形式如下:

IF search_condition THEN statement_list[ELSEIF search_condition THEN statement_list]...[ELSE statement_list]
END IF

其中,search_condition 参数表示条件判断语句,如果返回值为 TRUE ,相应的 SQL 语句列表(statement_list)被执行;如果返回值为 FALSE,则 ELSE 子句的语句列表被执行。statement_list 可以包括一个或多个语句。
注意:MySQL 中的 IF( ) 函数不同于这里的 IF 语句。

例 1
下面是一个使用 IF 语句的示例。代码如下:

IF age>20 THEN SET @count1=@count1+1;ELSEIF age=20 THEN @count2=@count2+1;ELSE @count3=@count3+1;
END lF;

该示例根据 age 与 20 的大小关系来执行不同的 SET 语句。如果 age 值大于20,那么将 count1 的值加 1;如果 age 值等于 20,那么将 count2 的值加 1;其他情况将 count3 的值加 1。IF 语句都需要使用 END IF 来结束。

2. CASE语句

CASE 语句也是用来进行条件判断的,它提供了多个条件进行选择,可以实现比 IF 语句更复杂的条件判断。CASE 语句的基本形式如下:

CASE case_valueWHEN when_value THEN statement_list[WHEN when_value THEN statement_list]...[ELSE statement_list]
END CASE

其中:

  • case_value 参数表示条件判断的变量,决定了哪一个 WHEN 子句会被执行;
  • when_value 参数表示变量的取值,如果某个 when_value 表达式与 case_value 变量的值相同,则执行对应的
    THEN 关键字后的 statement_list 中的语句;
  • statement_list 参数表示 when_value 值没有与 case_value 相同值时的执行语句。
  • CASE 语句都要使用 END CASE 结束。

CASE 语句还有另一种形式。该形式的语法如下:

CASEWHEN search_condition THEN statement_list[WHEN search_condition THEN statement_list] ...[ELSE statement_list]
END CASE

其中,search_condition 参数表示条件判断语句;statement_list 参数表示不同条件的执行语句。

与上述语句不同的是,该语句中的 WHEN 语句将被逐个执行,直到某个 search_condition 表达式为真,则执行对应 THEN 关键字后面的 statement_list 语句。如果没有条件匹配,ELSE 子句里的语句被执行。
这里介绍的 CASE 语句与“控制流程函数”里描述的 SQL CASE 表达式的 CASE 语句有轻微的不同。这里的 CASE 语句不能有 ELSE NULL 语句,并且用 END CASE 替代 END 来终止。

例 2
下面是一个使用 CASE 语句的示例。代码如下:

CASE ageWHEN 20 THEN SET @count1=@count1+1;ELSE SET @count2=@count2+1;
END CASE;

代码也可以是下面的形式:

CASEWHEN age=20 THEN SET @count1=@count1+1;ELSE SET @count2=@count2+1;
END CASE;

本示例中,如果 age 值为 20,count1 的值加 1,否则 count2 的值加 1。

3. LOOP 语句

LOOP 语句可以使某些特定的语句重复执行。与 IF 和 CASE 语句相比,LOOP 只实现了一个简单的循环,并不进行条件判断。

LOOP 语句本身没有停止循环的语句,必须使用 LEAVE 语句等才能停止循环,跳出循环过程。LOOP 语句的基本形式如下:

[begin_label:]LOOPstatement_list
END LOOP [end_label]

其中,begin_label 参数和 end_label 参数分别表示循环开始和结束的标志,这两个标志必须相同,而且都可以省略;statement_list 参数表示需要循环执行的语句。

例 3
使用 LOOP 语句进行循环操作。代码如下:

add_num:LOOPSET @count=@count+1;
END LOOP add_num;

该示例循环执行 count 加 1 的操作。因为没有跳出循环的语句,这个循环成了一个死循环。LOOP 循环都以 END LOOP 结束。

4. LEAVE 语句

LEAVE 语句主要用于跳出循环控制。其语法形式如下:

LEAVE label

其中,label 参数表示循环的标志,LEAVE 语句必须跟在循环标志前面。

例 4
下面是一个 LEAVE 语句的示例。代码如下:

add_num:LOOPSET @count=@count+1;IF @count=100 THENLEAVE add_num;
END LOOP add num;

该示例循环执行 count 加 1 的操作。当 count 的值等于 100 时,跳出循环。

5. ITERATE 语句

ITERATE 是“再次循环”的意思,用来跳出本次循环,直接进入下一次循环。ITERATE 语句的基本语法形式如下:

ITERATE label

其中,label 参数表示循环的标志,ITERATE 语句必须跟在循环标志前面。
例 5
下面是一个 ITERATE 语句的示例。代码如下:

add_num:LOOPSET @count=@count+1;IF @count=100 THENLEAVE add_num;ELSE IF MOD(@count,3)=0 THENITERATE add_num;SELECT * FROM employee;
END LOOP add_num;

该示例循环执行 count 加 1 的操作,count 值为 100 时结束循环。如果 count 的值能够整除 3,则跳出本次循环,不再执行下面的 SELECT 语句。
说明:LEAVE 语句和 ITERATE 语句都用来跳出循环语句,但两者的功能是不一样的。LEAVE 语句是跳出整个循环,然后执行循环后面的程序。而 ITERATE 语句是跳出本次循环,然后进入下一次循环。使用这两个语句时一定要区分清楚。

6. REPEAT 语句

REPEAT 语句是有条件控制的循环语句,每次语句执行完毕后,会对条件表达式进行判断,如果表达式返回值为 TRUE,则循环结束,否则重复执行循环中的语句。

REPEAT 语句的基本语法形式如下:

[begin_label:] REPEATstatement_listUNTIL search_condition
END REPEAT [end_label]

其中:

  • begin_label 为 REPEAT 语句的标注名称,该参数可以省略;
  • REPEAT 语句内的语句被重复,直至 search_condition 返回值为 TRUE。
  • statement_list 参数表示循环的执行语句;
  • search_condition 参数表示结束循环的条件,满足该条件时循环结束。
  • REPEAT 循环都用 END REPEAT 结束。

例 6
下面是一个使用 REPEAT 语句的示例。代码如下:

REPEATSET @count=@count+1;UNTIL @count=100
END REPEAT;

该示例循环执行 count 加 1 的操作,count 值为 100 时结束循环。

7. WHILE 语句

WHILE 语句也是有条件控制的循环语句。WHILE 语句和 REPEAT 语句不同的是,WHILE 语句是当满足条件时,执行循环内的语句,否则退出循环。WHILE 语句的基本语法形式如下:

[begin_label:] WHILE search_condition DOstatement list
END WHILE [end label]

其中,search_condition 参数表示循环执行的条件,满足该条件时循环执行;statement_list 参数表示循环的执行语句。WHILE 循环需要使用 END WHILE 来结束。
例 7
下面是一个使用 WHILE 语句的示例。代码如下:

WHILE @count<100 DOSET @count=@count+1;
END WHILE;

该示例循环执行 count 加 1 的操作,count 值小于 100 时执行循环。如果 count 值等于 100 了,则跳出循环。

11、流程控制语句详解,IF,CASE,LOOP,LEAVE, ITERATE,REPEAT,WHILE相关推荐

  1. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  2. shell 编程之流程控制语句详解

    前言 可以说,在任何一门编程语言中都离不开流程控制语句,使用流程控制语句可以帮助程序处理各类复杂的操作,常用的流程控制语句,比如: if-else,while,for循环等,在linux 的shell ...

  3. python流程控制语句-Python流程控制语句详解

    1.程序结构 计算机在解决问题时,分别是顺序执行所有语句.选择执行部分语句.循环执行部分语句,分别是:顺序结构.选择结构.循环结构.如下图: 2.选择语句 2.1最简单的if语句 Python使用保留 ...

  4. Python基础教程,流程控制语句详解

    1.程序结构 计算机在解决问题时,分别是顺序执行所有语句.选择执行部分语句.循环执行部分语句,分别是:顺序结构.选择结构.循环结构.如下图: 很多人学习python,不知道从何学起. 很多人学习pyt ...

  5. 怎么在手机上取消双重认证_用手机在淘宝上怎么开网店?流程步骤详解

       这是一篇关于"用手机在淘宝上怎么开网店?流程步骤详解"的文章: 开网店因为门槛低.收益大,成为众多年轻人创业的首选.很多新手朋友们都想开一家属于自己的网店,但是苦于没有经验, ...

  6. WindowsMediaPlayer 11 控件详解

    WindowsMediaPlayer 11 控件详解 转载别人的VB内容 C#中大多也通用 都是Microsoft的作品 . 属性/方法名: 说明: [基本属性] URL:String; 指定媒体位置 ...

  7. [转]《战地3》寒霜2引擎渲染流程图文详解

    一直一来受制于技术.预言和环境,中国国内玩家.开发者对于国外先进游戏引擎的渲染流程知之甚少,虽然没有技术封锁缺更似自我封锁,在GDC上很少看到中国开发者的身影,无法学习到先进的开发经验. 首先来回味一 ...

  8. jsapi支付签名_PHP实现微信支付(jsapi支付)流程步骤详解

    最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路. 前期准备: 1.微信认证服务号,并且开通了微 ...

  9. mysql int(3)与int(11)的区别详解

    这篇文章主要介绍了mysql int(3)与int(11)的区别详解的相关资料,需要的朋友可以参考下 mysql int(3)与int(11)的区别 总结,int(M) zerofill,加上zero ...

最新文章

  1. [Jsp] JSP和Servlet页面间的参数的传递和接收
  2. 教你如何成为解决问题的高手
  3. ggplot2实现分半小提琴图绘制基因表达谱和免疫得分
  4. Ark CEO:本次比特币下跌属于健康回调
  5. activiti6使用
  6. Java实现拖拉/滑动图片验证码
  7. 刷机“变砖”,黑屏,自己通过以下方法再次让手机死而复生
  8. VB6程序实现XP或者WIN7风格
  9. Json转XML后将首字母大写(或者其他自己的需求格式)对象中包含list集合以及日期字段的处理(注解形式)
  10. AIROBOT系统 之 私人存储 和 DLNA 智能电视云
  11. 必备技能:图解用电烙铁焊接电路
  12. LMS学习管理系统综述
  13. android 多个按键精灵,给大家分享一个,按键精灵安卓版,找多图, 以及找多图返回多个坐标的,相信大家绝对用得到 _ 按键精灵手机版 - 按键精灵论坛...
  14. 中国.net域名网站的“前世今生”,那些年的光辉
  15. 杭电2094 产生冠军
  16. hander机制原理
  17. 会议系统m900服务器网口灯,中兴视频会议mcu服务器zxv10-m900
  18. IDEA启动Nacos配置SOCKS代理
  19. 私有化云原生交付、8K 360VR直播……大厂技术专家揭秘金牌背后的“黑科技”...
  20. 计算机格式化后能恢复数据吗,移动硬盘格式化后数据还能恢复吗

热门文章

  1. TensorFlow:深度学习框架TensorFlow TensorFlow_GPU的简介、安装、测试之详细攻略
  2. ARIMA模型详细讲解
  3. AtCoder Regular Contest 092 Two Sequences AtCoder - 3943 (二进制+二分)
  4. 【思维题 状压dp】APC001F - XOR Tree
  5. cxgrid列高度行宽度定义
  6. 如何代替set get方法
  7. jQuery插件 -- Cookie插件
  8. wcf 远程终结点已终止该序列 可靠会话出错
  9. 关于这周工作中遇到的关于缓存问题的记录
  10. Intellij页面汉字乱码问题