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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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循环。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
13天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
27 1
|
15天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
22天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
108 1
|
10天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
99 0
|
23天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
53 0
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
131 6
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
63 3
Mysql(4)—数据库索引
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
71 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
24天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
73 2
|
27天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
102 4
下一篇
无影云桌面