Mysql 流程控制

news2025/4/8 16:15:50

简介

我们可以在存储过程和函数中实现比较复杂的业务逻辑,但是需要对应的流程控制语句来控制,就像Java中分支和循环语句一样,在MySQL中也提供了对应的语句,接下来就详细的介绍下。

在这里插入图片描述
在这里插入图片描述

1.分支结构

1.1 IF语句

IF 表达式1 THEN 操作1
[ELSEIF 表达式2 THEN 操作2]……
[ELSE 操作N]
END IF

案例:

# IF语句的基本使用
CREATE PROCEDURE PROC_IF2(IN age int)
BEGIN
#DECLARE AGE INT(3) DEFAULT 12;
IF AGE < 18
THEN SELECT '未成年';
ELSEIF AGE BETWEEN 18 AND 30 THEN SELECT '青年人';
ELSEIF AGE BETWEEN 30 AND 60 THEN SELECT '中年人';
ELSE SELECT '老年人';
END IF;
END;
# 调用存储过程
CALL PROC_IF2(77) ;

1.2 CASE语句

CASE语句的语法结构1:

#情况一:类似于switch
CASE 表达式
WHEN1 THEN 结果1或语句1(如果是语句,需要加分号)
WHEN2 THEN 结果2或语句2(如果是语句,需要加分号)
...
ELSE 结果n或语句n(如果是语句,需要加分号)
END [case](如果是放在begin end中需要加上case,如果放在select后面不需要)

CASE语句的语法结构2:

#情况二:类似于多重if
CASE
WHEN 条件1 THEN 结果1或语句1(如果是语句,需要加分号)
WHEN 条件2 THEN 结果2或语句2(如果是语句,需要加分号)
...
ELSE 结果n或语句n(如果是语句,需要加分号)
END [case](如果是放在begin end中需要加上case,如果放在select后面不需要)

2.循环结构

2.1 LOOP语句

LOOP循环语句用来重复执行某些语句。LOOP内的语句一直重复执行直到循环被退出(使用LEAVE子句),跳出循环过程。

[loop_label:] LOOP
循环执行的语句
END LOOP [loop_label]

其中,loop_label表示LOOP语句的标注名称,该参数可以省略

案例:使用LOOP语句循环操作,循环10次后退出

# 使用LOOP语句进行循环,循环10次,输出信息
# 创建存储过程,使用LOOP处理循环操作
CREATE PROCEDURE PROC_LOOP()
BEGIN
DECLARE I INT DEFAULT 0 ;
ADD_LOOP:LOOP
SELECT I;
SET I = I + 1;
IF I >= 10 THEN LEAVE ADD_LOOP;
END IF;
END LOOP ADD_LOOP;
END;

# 调用存储过程
CALL PROC_LOOP();

2.2 WHILE语句

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

[while_label:] WHILE 循环条件 DO
循环体
END WHILE [while_label];

案例:创建存储过程,并通过while语句循环10次

# 创建一个存储过程,使用WHILE来实现10次循环的操作
CREATE PROCEDURE PROC_WHILE1()
BEGIN
DECLARE I INT DEFAULT 0;
ADD_WHILE:WHILE I <= 10 DO
# 在循环体中我们需要修改条件变量
SELECT I ;
SET I = I + 1;
END WHILE ADD_WHILE;
END;
# 在WHILE循环中我们省略了 while_lable
CREATE PROCEDURE PROC_WHILE2()
BEGIN
DECLARE I INT DEFAULT 0;
WHILE I <= 10 DO
# 在循环体中我们需要修改条件变量
SELECT I ;
SET I = I + 1;
END WHILE ;
END;

# 调用存储过程
CALL PROC_WHILE1();

2.3 REPEAT语句

REPEAT语句创建一个带条件判断的循环过程。与WHILE循环不同的是,REPEAT 循环首先会执行一次循环,然后在 UNTIL 中进行表达式的判断,如果满足条件就退出,即 END REPEAT;如果条件不满足,则会就继续执行循环,直到满足退出条件为止。

[repeat_label:] REPEAT
循环体的语句
UNTIL 结束循环的条件表达式
END REPEAT [repeat_label]

案例:创建存储过程,通过REPEAT语句实现循环5次的操作

# 创建一个存储过程,循环5次
CREATE PROCEDURE PROC_REPEAT()
BEGIN
DECLARE I INT DEFAULT 0;
REPEAT
# SELECT I;
SET I = I + 1;
UNTIL I >= 5
END REPEAT ;
SELECT I;
END;
DROP PROCEDURE PROC_REPEAT;
# 调用存储过程
CALL PROC_REPEAT();

2.4 对比三种循环结构

    1. 这三种循环都可以省略名称,但如果循环中添加了循环控制语句(LEAVE或ITERATE)则必须添加名称。
    1. LOOP:一般用于实现简单的"死"循环
      WHILE:先判断后执行
      REPEAT:先执行后判断,无条件至少执行一次

3.跳转语句

3.1 LEAVE语句

LEAVE语句:可以用在循环语句内,或者以 BEGIN 和 END 包裹起来的程序体内,表示跳出循环或者跳出程序体的操作。如果你有面向过程的编程语言的使用经验,你可以把 LEAVE 理解为 break。

基本格式如下:

LEAVE 标记名
-- 其中,label参数表示循环的标志。LEAVE和BEGIN ... END或循环一起被使用

案例:

CREATE PROCEDURE PROC_LOOP()
BEGIN
DECLARE I INT DEFAULT 0 ;
ADD_LOOP:LOOP
SELECT I;
SET I = I + 1;
IF I >= 10 THEN LEAVE ADD_LOOP; # LEAVE ADD_LOOP;退出LOOP循环 相当Java中的break关键字
END IF;
END LOOP ADD_LOOP;
END;

3.2 ITERATER语句

ITERATE语句:只能用在循环语句(LOOP、REPEAT和WHILE语句)内,表示重新开始循环,将执行顺序转到语句段开头处。如果你有面向过程的编程语言的使用经验,你可以把 ITERATE 理解为continue ,意思为“再次循环”。

ITERATE label
-- label参数表示循环的标志。ITERATE语句必须跟在循环标志前面

案例:

# 跳转语句的使用
CREATE PROCEDURE PROC_ITERATE() BEGIN DECLARE I INT DEFAULT 0; ADD_LOOP :LOOP 
SET 
  I = I + 1; IF I & gt;= 10 THEN LEAVE ADD_LOOP; # LEAVE 结束当前循环语句
  END IF; IF I = 5 THEN ITERATE ADD_LOOP; # ITERATE 跳过当前循环开始下一场循环
  END IF; 
SELECT 
  I; END LOOP ADD_LOOP; END; 

# 调用存储过程
CALL PROC_ITERATE();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/981595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚信科技AntDB数据库携“U8C+AntDB联合产品”亮相“2023全球商业创新大会”,开启生态合作新篇章

8月18-19日&#xff0c;近万人齐聚上海国家会展中心&#xff0c;带着对数字化、数智化趋势和热点的关注&#xff0c;以满腹热情投身到以“数据驱动 智能运营”为主题的“2023全球商业创新大会”&#xff0c;共商新技术条件下企业信息化出现的新课题、新挑战&#xff0c;共享数智…

【MQTT接收数据写入数据库】

MQTT接收数据写入数据库 1.搭建MQTT服务器 参考上一篇文章 2.安装数据库mysql sudo apt update sudo apt install mysql-server创建一个数据库和数据表存储mqtt消息 首先&#xff0c;登录到MySQL服务器&#xff1a; mysql -u root -p输入你的root用户密码。默认root 3.创…

Json字符串内容比较-超实用版

背景 之前有类似接口diff对比&#xff0c;数据对比的测试需求&#xff0c;涉及到json格式的数据对比&#xff0c;调研了几个大神们分享的代码&#xff0c;选了一个最符合自己需求的研究了下。 说明 这个对比方法&#xff0c;支持JsonObject和JsonArray类型的数据对比&#x…

攻防世界-crypto-工业协议分析2

打开附件得到 尝试直接搜索flag关键字&#xff0c;未果 发现存在关于ARP、UDP、SNA协议的流量包&#xff0c;仔细分析后发现大量的UDP包大小都一样&#xff0c;只有少量的是不同的&#xff0c;一个一个找下去&#xff0c;发现如下包有异常字符&#xff1a; 提取字符串&#xff…

MyBatis: 向oracle表中插入null字段的处理

一、可以在SQL中指定类型&#xff1a; Insert("insert into student values(#{name},#{age})")二、可以进行全局配置&#xff08;单独使用MyBatis时可如下配置&#xff09; 如果不进行配置&#xff0c;将报错

移动安全测试框架-MobSF WINDOWS 环境搭建

安装python python-3.11.5-amd64.exe 安装Win64OpenSSL-3_1_2.exe 安装VisualStudioSetup.exe github下载安装包 https://github.com/MobSF/Mobile-Security-Framework-MobSF/archive/refs/heads/master.zip GitHub - MobSF/Mobile-Security-Framework-MobSF: Mobile Secur…

【Apollo】自动驾驶技术的介绍

阿波罗是百度发布的名为“Apollo&#xff08;阿波罗&#xff09;”的向汽车行业及自动驾驶领域的合作伙伴提供的软件平台。 帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 百度开放此项计划旨在建立一个以合作为中…

2023年软件测试常见面试题

测试花费的成本&#xff0c;要深入在那个环节上&#xff0c;&#xff08;前提准备上&#xff0c;需求理解上&#xff0c;业务逻辑&#xff0c;排错上&#xff0c;业务名词上理解&#xff0c;通过什么样的方法&#xff0c;有谁能解决这样的问题&#xff09; 软性热身题 1.自我…

Matlab图像处理-高斯低通滤波器

高通滤波 图像的边缘、细节主要位于高频部分&#xff0c;而图像的模糊是由于高频成分比较弱产生的。高通滤波就是为了高消除模糊&#xff0c;突出边缘。因此采用高通滤波器让高频成分通过&#xff0c;消除低频噪声成分削弱&#xff0c;再经傅里叶逆变换得到边缘锐化的图像。 …

C语言基础(下)

结构体 结构体类型的声明 结构体是一些值得集合&#xff0c;这些值称为成员变量。结构体得每个成员可以是不同类型得变量。 语法&#xff1a;struct tag{member-list;}variable-list;创建方法一&#xff1a;&#xff08;普通创建&#xff09; struct Stu {char name[20];char…

在Windows配置PPPoE连接

PPPoE&#xff08;Point-to-Point Protocol over Ethernet&#xff09;是一种常用的网络接入方式&#xff0c;广泛应用于家庭宽带、企业互联网等场景。本文将为您提供详细步骤和示例来指导如何在Windows操作系统上进行PPPoE连接的设置与配置。 1. 打开网络和共享中心 首先&…

关于在ts中使用最新版redux的方法记录

1.首先在react-ts项目中引入redux&react-redux npm i --save redux react-redux 2.redux文件及目录建设 3.文件说明 Store.ts&#xff1a;为入口文件 reducers: 为多个reducer独立文件&#xff0c;并且每个reducer都设置自己的类型注解文件 代码展示如下&#xff1a;…

zemax简单非序列光学系统

切换到非序列模式&#xff1a; 建立一个标准面&#xff0c;设置为抛物面&#xff0c;反射 添加灯丝光源&#xff1a; 陈列光线条数是图中蓝色光线的数目&#xff0c;分析光线条数是后续计算用到的光线条数 匝数&#xff08;圈数&#xff09;和长度、曲率半径决定了灯丝光源的形…

【Git】删除本地分支;报错error: Cannot delete branch ‘wangyunuo-test‘ checked out at ‘XXX‘

目录 0.环境 1.问题描述 2.解决步骤 1&#xff09;使用命令切换到其他分支 2&#xff09;查看当前本地所有分支 3&#xff09;删除“wangyunuo-test”分支 0.环境 windows 11 64位 Git VScode跑代码 1.问题描述 在做项目过程中&#xff0c;想删除一个本地分支“wangyun…

下载JDK及配置环境变量

Oracle网址 Java Downloads | Oracle 环境变量的配置 1. 在系统变量中新建名 JAVA_HOME 的变量 值为你jdk按照的文件目录 2. 在系统变量里面新建一个CLASSPATH变量&#xff0c;其变量值如下图所示&#xff08;此处需要注意&#xff1a;最前面有一个英文状态下的小圆点&#x…

git branch 分支

分支的定义 一个分支是git一个可移动的指针&#xff0c;指向某次提交。每次提交后&#xff0c;当前分支指针就往前挪一个&#xff0c;挪到最新的提交上。 HEAD 指向当前活动的分支 master 默认分支名 &#xff08;git init命令 默认创建它&#xff09; 常见分支指令 创建一个…

电子元器件采购的数字化转型:智能采购工具的应用

电子元器件采购的数字化转型是采购领域的一项重要趋势&#xff0c;智能采购工具的应用在此过程中发挥了关键作用。以下是智能采购工具在电子元器件采购数字化转型中的应用方面的一些关键点&#xff1a; 供应链可见性&#xff1a; 智能采购工具可以提供对供应链的实时可见性。通…

晶尔忠产业集团全面启动暨表彰大会

八月下旬&#xff0c;三伏已尽&#xff0c;初秋遂至。夏日的余热还没有完全散去&#xff0c;初秋的热浪随之席卷而来&#xff0c;大地依旧绿意盎然&#xff0c;万物正是生长最猛烈的时期&#xff0c;为秋天的收获做最后的冲刺&#xff0c;这是一个充满生机的时节&#xff0c;也…

java:操作session

概念 服务器端会话技术&#xff0c;在一次会话的多次请求间共享数据&#xff0c;将数据保存在服务器端的对象中。 一次会话&#xff1a;网页只要不关闭就是一次会话&#xff0c;关闭后会话结束。 示例&#xff1a;会话共享 如下两个Servlet&#xff0c;在浏览器访问 sessio…

【MySQL】事务 详解

事务 详解 一. 为什么使用事务二. 事务的概念三. 使用四. 事务的特性原子性&#xff08;Atomicity&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;Durability&#xff09; 五. 事务并发所带来的问题脏读问题…