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

本文介绍了MySQL中的流程控制语句,包括IF和CASE条件判断,Loop、While、Repeat循环结构,以及Leave和Iterate跳转语句。这些语句主要用于存储过程,实现复杂的逻辑操作。此外,还提及了游标的概念,它是处理结果集的一种机制,使得SQL具有面向过程操作的能力。
摘要由CSDN通过智能技术生成

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、案例实操
在这里插入图片描述

1.1.2 Case(条件判断)

1、语法结构

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

案例实操
在这里插入图片描述

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

案例实操:
在这里插入图片描述

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

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

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

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

在这里插入图片描述

1.2.2 While(循环结构)

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

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

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

2、案例实操(本次实操没有给While循环取别名)
(1加到10的和)
在这里插入图片描述

1.2.3 repeat(循环结构)

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

1、语法结构

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

2、案例实操(1加到10的和)
在这里插入图片描述

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

案例实操
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光下的赶路人star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值