数据库原理及MySQL应用 | 程序流程控制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 解决复杂问题不可能通过一个SQL语句完成,我们需要执行多个SQL操作。流程控制语句的作用就是控制存储过程或存储函数中SQL语句的执行顺序,是我们完成复杂操作必不可少的一部分。

流程控制语句是指可以控制程序运行顺序的语句,程序运行顺序主要包括顺序结构、分支结构和循环结构。MySQL中流程控制语句有IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句等。

01、判断语句

判断语句用来进行条件判断,根据是否满足条件(可包含多个条件),来执行不同的语句。判断语句构成分支结构。MySQL中常用的判断语句有IF和CASE两种。

1. IF语句

IF语句用来进行条件判断,可根据不同条件执行不同的操作。该语句在执行时首先判断IF语句后的条件是否为真,为真则执行THEN后的内容,如果为假则继续判断下一个IF语句直到条件为真为止,当以上条件都不满足时则执行ELSE子句后的内容。IF语句的基本语法格式如下所示。

image.png


语法说明如下。

search_condition是条件表达式。

statement_list是当前面的条件表达式为真时执行的SQL语句列表。

ELSEIF子句是可选选项,当前面的条件表达式为假时,用于设定继续判断的下一个IF语句。

ELSE子句是可选选项,用于设定当前面所有条件都不满足时执行的子句。

【例8-30】在图书销售数据库booksale中建立存储过程getpricelevel1,该存储过程可通过图书编号bookid查看图书价格,返回价格和等级,其中价格高于或等于100元为A级,低于100元且高于或等于70元为B级,低于70元且高于或等于50元为C级,低于50元且高于或等于30元为D级,其余为E级,然后调用存储过程查看结果。

image.png


执行结果如图8-13所示。

image.png


■ 图8-13IF语句

2. CASE语句

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

image.png


语法说明如下。

case_value是表示条件判断的变量,决定了哪一个WHEN子句会被执行。

when_value是表示变量的取值,如果某个when_value的值与case_value变量的值相同,则执行对应的THEN关键字后的statement_list中的语句。

ELSE子句是可选选项,用于设定当前面所有条件都不满足时执行的子句。其后的statement_list表示当when_value的值都不与case_value的值相同时的执行语句。

image.png


语法说明如下。

search_condition参数表示条件判断语句。

statement_list参数表示不同条件的执行语句。

ELSE子句是可选选项,用于设定当前面所有条件都不满足时执行的子句。

提示

语法2与语法1不同的是,语法2语句中的WHEN语句将被逐个执行,直到某个search_condition表达式为真,则执行对应THEN关键字后面的statement_list语句。如果没有条件匹配,ELSE子句里的语句被执行。CASE不能用于判断NULL。

【例8-31】用CASE语句改写例8-30,建立存储过程getpricelevel2,然后调用存储过程查看结果。

image.png

02、循环语句

循环语句是在符合指定条件的情况下,重复执行某一段代码。循环语句是构成循环结构的一部分。MySQL中常用的循环语句有LOOP、REPEAT和WHILE三种。

1. LOOP语句

LOOP语句用来实现简单的循环,使系统能够重复执行循环体内的语句列表。与IF和CASE语句相比,LOOP只是实现了一个简单的循环,并不进行条件判断。LOOP语句的基本语法格式如下所示。

image.png

语法说明如下。

begin_label和end_label是可选选项,分别是循环开始和结束的标志,该标志必须符合标识符命名规则,且最长为16个字符。如果设置了begin_label,则后面必须带着冒号(:),end_label可以省略。但如果设置了end_label,那必须设置begin_label,且标志名必须相同。

statement_list表示循环执行的语句。

提示

LOOP语句本身没有停止循环的语句,必须使用跳转语句LEAVE才能停止循环,跳出循环过程,否则会出现死循环。

【例8-32】在图书销售数据库booksale中建立存储过程sumnumber1,该存储过程可实现1到任意数的累加,然后调用存储过程查看结果。

image.png


执行结果如图8-14所示。

image.png


■ 图8-141到任意数的累加

声明局部变量i并赋初始值为1,声明局部变量sum并赋初始值为0,然后在LOOP语句中判断i的值是否大于输入的数值,如果是则输出num的值和sum的值,然后退出循环;如果不是则将i的值累加到sum变量中,并对i进行加1,再次执行LOOP中的语句。

2. REPEAT语句

REPEAT语句可以实现有条件控制的循环,每次语句执行完毕,会对条件表达式进行判断,如果表达式返回值为真,则循环结束,否则重复执行循环中的语句。REPEAT语句的基本语法格式如下所示。

image.png


语法说明如下。

begin_label、end_label和statement_list同LOOP语句的同名参数保持一致。

search_condition是结束循环的条件,满足该条件即条件的返回值为TRUE时循环结束。

【例8-33】用REPEAT改写例8-32,建立存储过程sumnumber2,然后调用存储过程查看结果。

image.png

3. WHILE语句

WHILE语句同样可以实现有条件控制的循环。WHILE语句和REPEAT语句不同的是,WHILE语句是当满足条件时,才执行循环内的语句,否则退出循环。WHILE语句的基本语法格式如下所示。

image.png


语法说明:所有参数同REPEAT语句的同名参数保持一致。

【例8-34】用WHILE改写例8-32,建立存储过程sumnumber3,然后调用存储过程查看结果。

image.png

03、跳转语句

跳转语句用于实现程序执行过程中的流程跳转。MySQL中常用的跳转语句有LEAVE和ITERATE两种。跳转语句也是构成循环结构的一部分。

跳转语句的基本语法格式如下所示。

image.png


语法说明:label表示循环的标志。

提示

LEAVE语句和ITERATE语句都用来跳出循环语句,但两者的功能是不一样的。TERATE语句用于结束本次循环的执行,开始下一轮循环的执行操作,重新开始循环;而LEAVE语句用于跳出整个循环,然后执行循环后面的程序。使用这两个语句时一定要区分清楚。

ITERATE语句只能应用在循环结构LOOP、REPEAT和WHILE语句中,LEAVE除可以在循环结构中应用外,还可在BEGIN…END中使用。

【例8-35】对比LEAVE和ITERATE的使用,然后调用存储过程查看结果。

image.png

执行结果如图8-15所示。

image.png


■ 图8-15LOOP语句

声明局部变量num并赋初始值为0,在LOOP循环中,当num小于5时,利用ITERATE不执行以下操作,重新开始LOOP循环,直到num大于5时,查看num的具体值,并利用LEAVE跳出LOOP循环。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
18小时前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
16 0
|
18小时前
|
缓存 关系型数据库 Java
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
15 0
|
18小时前
|
存储 人工智能 NoSQL
现代数据库技术演进与应用前景分析
本文探讨了现代数据库技术的演进历程及其在各领域的应用前景。首先介绍了传统数据库的局限性,随后分析了NoSQL、NewSQL以及分布式数据库等新兴技术的特点和优势。接着探讨了人工智能、物联网、大数据等领域对数据库技术提出的新要求,并展望了未来数据库技术的发展趋势与应用前景。
|
18小时前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
22 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
18小时前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
18 0
|
18小时前
|
存储 算法 关系型数据库
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
|
18小时前
|
SQL 存储 关系型数据库
MySQL查询原理,看这一篇就够了!
MySQL查询原理,看这一篇就够了!
|
18小时前
|
存储 缓存 关系型数据库
MySQL结构流程,看这一篇就够了!
MySQL结构流程,看这一篇就够了!
|
18小时前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
19 0
|
18小时前
|
存储 NoSQL 搜索推荐
探索新一代数据库技术:基于图数据库的应用与优势
传统关系型数据库在处理复杂的关系数据时存在着诸多限制,而基于图数据库的新一代数据库技术则提供了更为灵活和高效的解决方案。本文将深入探讨图数据库的核心概念、应用场景以及与传统数据库相比的优势,带领读者一窥未来数据库技术的发展趋势。