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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
24天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:揭秘MySQL游标,数据处理的神秘利器(16)
轻松入门MySQL:揭秘MySQL游标,数据处理的神秘利器(16)
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
19天前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
|
24天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
2月前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表10、数据导入和导出——1、数据导入(LOAD DATA, mysqldump)——2、数据导出(SELECT ... INTO OUTFILE, mysqldump)
MySQL技能完整学习列表10、数据导入和导出——1、数据导入(LOAD DATA, mysqldump)——2、数据导出(SELECT ... INTO OUTFILE, mysqldump)
49 0
|
4天前
|
存储 SQL 关系型数据库
MySQL学习手册(第一部分)
mysql日常使用记录
61 0
|
26天前
|
SQL 关系型数据库 MySQL
【MySQL】慢SQL分析流程
【4月更文挑战第1天】【MySQL】慢SQL分析流程