首页 > 数据库 >MySQL——事务与存储过程(二)存储过程的创建(5)流程控制的使用

MySQL——事务与存储过程(二)存储过程的创建(5)流程控制的使用

时间:2024-09-05 08:53:31浏览次数:13  
标签:语句 CASE 存储 END val list MySQL 过程 LOOP

        在编写存储过程时还有一个非常重要的部分——流程控制。流程控制语句用于将多个 SQL 语句划分或组合成符合业务逻辑的代码块。MySQL中的流程控制语句包括:IF语句、CASE 语句LOOP语句、WHILE 语句、LEAVE 语句、ITERATE 语句、REPEAT 语句和 WHILE语句。

        每个流程中可能包含一个单独语句,也可能是使用 BEGIN…END构造的复合语句可以嵌套。接下来将针对存储过程中的流程控制语句逐一详细地讲解。

1.IF语句

        IF语句是指如果满足某种条件,就根据判断的结果为 TRUE 或 FALSE 执行相应的语句,其语法格式如下:

IF expr_condition THEN statement_list
    [ELSEIF expr_condition THEN statement_list]
    [ELSE statement_list]
END IF

        IF实现了一个基本的条件构造。在上述语法结构中,expr_condition 表示判断条件,statement_list 表示 SQL 语句列表,它可以包括一个或多个语句。如果 expr_condition求值为TRUE,相应的 SQL 语句列表就会被执行;如果没有 expr_condion 匹配,则ELSE子句里的语句列表被执行。

        需要注意的是,MySQL 中还有一个 IF()函数,它不同于这里描述的  语句。接下来演示一下 IF 语句的用法,示例代码如下:

IF val IS NULL
    THEN SELECT 'val is NULL';
    ELSE SELECT 'val is not NULL';
END IE;

        上述代码中,判断 val 值是否为空,如果 val 值为空,输出字符串“val is NULL”;否则输出字符串“val is not NULL”。需要注意的是, 语句都需要使用 END IF 来结束,不可省略。

2.CASE 语句

        CASE是另一个进行条件判断的语句,该语句有两种语句格式,第一种格式如下:

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

        在上述语法格式中,case_expr表示条件判断的表达式,决定了哪一个 WHEN 子句会被执行;when_value 表示表达式可能的值,如果某个 when_value 表达式与 case_expr表达式结果相同,则执行对应 THEN 关键字后的 statement_list 中的语句,statement_list 表示不同 when_value 值的执行语句。
        例如,使用 CASE 流程控制语句的第一种格式,判断 val值等于 1、等于 2,或者两者都不等,语句如下:

CASE val
    WHEN 1 THEN SELEcT 'val is 1';
    WHEN 2 THEN SELECT 'vaL 1s 2';
    ELSE SELECT 'val is not l or 2';
END CASE;

        在上述代码中,当 val 值为1时,输出字符串“val is 1”;当 val 值为2时,输出字符串“val is 2”;否则输出字符串“val is not l or 2”CASE 语句的第二种格式如下:

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

        需要注意的是,这里讲解的用在存储过程里的CASE 语句与”控制流程函数”里描述的SQL CASE表达式中的 CASE 语句有些不同。存储过程里的 CASE 语句不能查ELSE NULL 子句,并且用 END CASE 替代 END 来终止。

3. LOOP 语句

        LOOP 循环语句用来重复执行某些语句,与F 和CASE 语句相比,LOOP 只是创建一个循环操作的过程,并不进行条件判断。LOOP 内的语句一直重复执行直到跳出循璃语句。LOOP语句的基本格式如下:

[loop_label:]LOOP
    statement_list
END LOOP [loop_label]

        上述语法格式中,loop_label 表示 LOOP 语句的标注名称,该参数可以省略;statement_list 表示需要循环执行的语句。
        例如,使用 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;

        例中,循环执行了id 加1的操作。当id 值小于 10 时,循环重复执行;当 id 值大于或者等于 10 时,使用LEAVE语句退出循环。关于LEAVE语句将在下面进行详细的讲解。

4.LEAVE 语句

        通过学习LOOP语句的使用可以知道,当不满足循环条件时,需要使用 LEAVE 语句退出循环。LEAVE 语句用于退出任何被标注的流程控制构造,其基本语法格式如下:

LEAVE label

        在上述语法结构中,label表示循环的标志。通常情况下,LEAVE 语句与 BEGIN...END、循环语句一起使用。

5.ITERATE 语句

        ITERATE 的意思是再次循环,ITERATE 语句用于将执行顺序转到语句段的开头处。使用ITERATE语句的基本语法格式如下:

ITERATE lable

        在上述语法结构中,lable 表示循环的标志。需要注意的是,ITERATE 语句只可以出现在 LOOP、REPEAT 和 WHILE 语句内。

        例如,演示了 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 PI>20 THEN LEAVE My_loop;
    END IF;
    SELECT 'pl is between 10 and 20';
END LOOP my_1oop;
END

        上述代码中,p1的初始值为0,如果 p1的值小于 10时,重复执行 p1加1的操作;当p1 大于或等于 10 并且小于 20时,打印消息“p1 is between 10 and 20”;当 p1 大于 20 时,退出循环。

6.REPEAT 语句

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

[repeat lable:] REPEAT
    statement list
UNTIL expr_condition
END REPEAT[repeat_lable]

        上述语法格式中,repeat_lable 为 REPEAT 语句的标注名称,该参数是可选的;REPEAT语句内的语句或语句群被重复,直至 expr_condition 为真。

        例如,演示使用 REPEAT 语句执行循环过程,具体代码如下:

DECLARE id INT DEFAULT 0;
REPEAT
SET id=id+1;
UNTIL id>=10;
END REPEAT;

7.WHILE 语句

        WHILE语句创建一个带条件判断的循环过程,与REPEAT不同的是,WHILE在语句执行时,先对指定的表达式进行判断,如果为真,则执行循环内的语句,否则退出彼环。WHILE语句的基本格式如下:

[while_lable:] WHILE expr_condition DO
    Statement list
END WHILE [while_lable]

        在上述语法格式中,while_lable 为 WHILE 语句的标注名称;expr_condition 为进行判断的表达式,如果表达式结果为真,WHILE语句内的语句或语句群被执行,直至 expr_condition 为假,退出循环。

        例如,演示使用 WHILE 语句进行循环操作,具体代码如下:

DECLARE i INT DEFAULT 0;
WHILE 1<10 DO
SET i=i+1;
END WHILE;

标签:语句,CASE,存储,END,val,list,MySQL,过程,LOOP
From: https://blog.csdn.net/W_Fe5/article/details/141777492

相关文章

  • mysql 8.0 的 建表 和八种 建表引擎实例
    文章目录MySQL8.0中,主要有以下八种常见的建表引擎一、InnoDB引擎建表注意点建表知识点二、MyISAM引擎建表使用场景三、Memory引擎使用场景四、Archive引擎五、BLACKHOLE引擎一、特点二、适用场景三、注意事项六、MRG_MyISAM引擎MRG_MyISAM和MyISAM的区别......
  • 第十讲:为什么我的MySQL会“抖”一下?
    目录第十讲:为什么我的MySQL会“抖”一下?图概:提出现实问题:SQL执行的时候特别快,有时变得特别慢原因:为什么有时会“flush”呢?第一种场景,粉板满了,记不下了。第二种场景,要记住的事情太多,自己快记不住了,找账本把这笔账先加进去。第三种场景是,生意不忙,打烊之后柜台没事,掌柜闲着也是闲......
  • MySQL常用窗口函数总和
    在MySQL中,窗口函数是一类用于在查询结果集中计算值的函数,允许用户根据数据行进行聚合或排序操作,同时保留行的详细信息。窗口函数在分析数据时非常有用,因为它们允许您在不缩小结果集的情况下对数据进行复杂的计算。常见的窗口函数包括:ROW_NUMBER()RANK()DENSE_RANK()NTILE(......
  • 网络传输的大致过程
    互联网世界,人们可以通过网络传输解除地域限制,实现消息的通信。那么网络传输的整体流程到底是怎么实现的呢?比如小王在他的电脑浏览器上输入了一个网址,经过网络传输,目标服务器收到了来自小王的请求,并响应了内容给小王。整个过程就涉及了两次网络传输,一次请求,一次响应。查看代码......
  • MySQL insert sql 返回自增id
    xml<insertid="addMain"useGeneratedKeys="true"keyColumn="id"keyProperty="id"parameterType="com.hopedove.coreserver.vo.vpm.ForeignTradeOutboundOrderVO">insertintoaps_foreign_trade_ex......
  • Linux宝塔Mysql两台服务器主从配置,服务器存在多个库
    实现目标:两台服务器(一台为从服务器,一台为主服务器),当主服务器的数据修改,从服务器复制主服务器的操作,实现自动修改数据;1、主数据库操作-先登录主数据库#登录数据库,用root登录方便,用其他账号会提示权限不足,需要登录root给予权限mysql-uroot-p密码2、创建一个账号,供从库用......
  • 依托自研力量,给共享集群存储服务一个优选
    YashanDB共享集群有三大关键组件,崖山集群服务(YCS)、崖山集群文件系统(YFS)、DB组件。上一篇共享集群系列文章《为何共享集群的高可用能力被频频称赞,它的机制有何不同?》深入解析了关键组件的高可用机制与核心技术,本文将深入探讨崖山集群文件系统(YFS)关键技术和特性,并阐释我们选择自主研......
  • 对象存储服务器有什么作用
    对象存储服务器(ObjectStorageServer)是专为存储、管理和检索大量非结构化数据(如文档、图片、音频、视频等)设计的存储解决方案。以下是对象存储服务器的主要作用:1.存储大量非结构化数据对象存储能够高效地处理和存储大量的非结构化数据,这是传统文件系统或块存储难以比拟的。2.数......
  • 保姆级教程:Dupay从注册到充值开卡全过程,可开GPT Plus、可绑定GPT充值API余额
    前言想要购买GPTPlus,或者给GPT充值,绑定国内visa信用卡,会被拒,于是便问问度娘,找到了一篇关于注册虚拟卡的教程,搬过来顺便修改下!应用场景1、DepayMasterVisa卡支持绑定宝、微、美外卖、拼多、Paypal(国区、美区、港区)、天猫国际版等等。2、支持Stripe商户、googleplay商......
  • 构建专业技能:MySQL数据备份策略的培训与实践
    数据备份是数据库管理中的一项基础且关键的任务,它直接关系到数据安全和业务连续性。在MySQL环境中,有效的数据备份策略培训对于确保团队成员能够正确执行备份操作、理解备份原理以及在必要时进行数据恢复至关重要。本文将详细介绍如何在MySQL中实现数据备份的策略培训,包括培......