MySQL学习---15、流程控制、游标

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL学习---15、流程控制、游标

1、流程控制

解决复杂问题不可能是通过一个SQL语句完成,我们需要执行多个SQL操作。流程控制语句的作用就是控制存储过程中SQL语句的执行顺序,是我们完成复杂操作必不可少的一部分。只要是执行的程序,流程就分为三大类:

1、顺序结构:程序从上往下依次执行

2、分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行。

3、循环结构:程序满足一定条件,重复执行一组语句。

针对MySQL的流程控制语句主要有三类。注意:只能用于存储程序(存储过程和函数)

1、条件判断语句:IF语句和Case语句

2、循环语句:Loop、While、Repeat语句

3、跳转语句:leave、Iterate语句

1.1 分支结构

程序按条件进行选择执行,从两条或多条路径中选择一条执行。
1.1.1 IF(条件判断)

1、语法结构

If 表达式1 Then 操作1;
[elseif 表达式2 Then 操作2;]...
[else 操作n;]
End if;

2、特点

(1)不同的表达式对应不同的操作

(2)使用在Begin…End中

3、案例实操

5ddad6b42cc046fe8dae57b0dad3e80e.png

1.1.2 Case(条件判断)

1、语法结构

#情况1:类似于switch
Case 表达式
When 值1 Then 结果1或语句1(如果是语句,需要加分号)
When 值2 Then 结果2或语句2(如果是语句,需要加分号)
...
Else 结果n或语句n(如果是语句,需要加分号)
End [Case] (如果是放在Begin End中需要加上Case,如果放在select后面不需要)

案例实操

a92b6a0fe5d8410c9d58607ad07ab72d.png

#情况二:类似多重if
Case 
when 条件1 Then 结果1或语句1(如果是语句,需要加分号)
When 条件2 Then 结果2或语句2(如果是语句,需要加分号)
...
Else 结果n或语句n(如果是语句,需要加分号)
End [case] (如果是放在Begin...End 中需要加上case,如果放在select后面不需要)

案例实操:

36312a74b30d4bf996eb91ebb11c43cb.png

1.2 循环结构

1.2.1 Loop(循环结构、还是个死循环)

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

1、语法结构

循环别名:loop
    循环体
    循环条件
  End Loop 循环别名

2、案例实操(1加到10的和)

556b9a1e4bbb4d8c87d2daa6edec833f.png

1.2.2 While(循环结构)

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

1、语法结构

[while_label:] While 循环条件 Do
  循环体
End While[while_label];

说明:while_label为While语句的标注名称;如果循环条件为真,While语句内的语句或语句群被执行,直至循环条件为假,退出循环条件。

2、案例实操(本次实操没有给While循环取别名)

(1加到10的和)

71cc971be55f44bd81fee4614892e467.png

1.2.3 repeat(循环结构)

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

1、语法结构

Repeat 
循环体
Until 结束循环的条件表达式
end Repeat[repeate_lable];

2、案例实操(1加到10的和)

e22c0fda54d045bca3a7e082e2885158.png

1.3 跳转语句

1.3.1 Leave语句(和java中break类似)

Leave语句可以用在循环语句中,或这Begin和End包裹起来的程序体内,表示跳出循环或者跳出循环体。

1、语法结构

Leave 标记名;

2、案例实操

看循环结构Loop的实例!!!

1.3.2 Iterate语句(和java中Continue类似)

Iterate语句只能用在循环语句(Loop、While、Repeat语句)内,表示重新开始循环,将执行顺序转到语句段的开头。

1、基本语法

Iterate label;

2、案例实操

mysql> DELIMITER //
mysql> CREATE PROCEDURE test_loop1()
-> BEGIN
-> DECLARE num INT DEFAULT 1;
-> DECLARE bSum INT DEFAULT 0;
-> LOOP
-> SET bSum = bSum + num;
-> IF num = 8 THEN
-> ITERATE;
-> END IF;
-> SET num = num + 1;
-> IF num > 10 THEN
-> LEAVE;
-> END IF;
-> END LOOP;
-> SELECT bSum;
-> END //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL test_loop1();
±-----+
| bSum |
±-----+
| 43 |
±-----+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

2、游标

2.1 什么是游标

虽然我们也可以通过筛选条件 WHERE 和HAVING,或者是限定返回记录的关键字 LIMIT 返回一条录,

但是,却无法在结果集中像指针一样,向前定位一条记录、向后定位一条记录,或者是 随意定位到某一

条记录 ,并对记录的数据进行处理。

这个时候,就可以用到游标。游标,提供了一种灵活的操作方式,让我们能够对结果集中的每一条记录

进行定位,并对指向的记录中的数据进行操作的数据结构。游标让 SQL 这种面向集合的语言有了面向过

程开发的能力。

在 SQL 中,游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。这里游标 充当了指针的作用 ,我们可以通过操作游标来对数据行进行操作。

案例实操

86508e216fe941c2804487567db9dfa9.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
SQL 存储 缓存
MySQL执行流程
本文介绍了MySQL的执行流程,分为server层和引擎层。server层包含连接器、查询缓存、解析器、预处理器、优化器等组件,负责SQL的接收、解析、优化及执行;引擎层负责数据的存储与读取。文章详细解释了各组件的功能,如连接器负责用户身份认证,查询缓存提高查询效率,解析器进行SQL的词法和语法分析,预处理器验证表和字段的存在性,优化器选择最优执行计划,最终由查询执行引擎完成查询并将结果返回给客户端。
MySQL执行流程
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
54 3
|
1月前
|
存储 SQL NoSQL
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
87 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
202 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
76 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
3月前
|
SQL 缓存 关系型数据库
揭秘MySQL一条SQL语句的执行流程
以上步骤共同构成了MySQL处理SQL语句的完整流程,理解这一流程有助于更有效地使用MySQL数据库,优化查询性能,及时解决可能出现的性能瓶颈问题。
107 7
|
2月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
23 0
|
2月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
283 0
|
3月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
50 3