当前位置:网站首页>MySQL 游标
MySQL 游标
2022-07-30 21:21:00 【m0_54853420】
1.游标的概述
我们之前写的sql语句,虽然可以通过筛选条件来限定返回的记录,但是我们却没有办法在结果集里面,像指针一样,定位每一条记录,向前定位,向后定位,或随意定位到某一条记录。为了解决这个问题,我们可以使用游标。
游标可以让我们可以对结果集中的每一条记录进行定位,并对指向的记录中的数据进行操作
- 在sql中,游标是一种临时的数据库对象
- 游标充当了指针的作用
- 我们可以通过操作游标来对数据进行操作
- MySQL中游标可以在存储过程和函数中使用

2.使用游标的步骤
- 游标要在声明处理程序之前被声明,而且变量和条件还必须在声明游标或处理程序之前被声明
- 使用游标一般要经历下面四个步骤:
- 声明游标
- 打开游标
- 使用游标
- 关闭游标
接下来就让我们来看看具体怎么使用。
2.1声明游标
在MySQL中,用declare关键字来声明游标
语法
DECLARE 游标名字 CURSOR FOR 查询语句;
这里的select语句用来返回一个创建游标的结果集
cursor 英文意思是游标,光标
简单记忆就是说用一个查询语句来描述游标
举例
DECLARE cur_emp CURSOR FOR
SELECT employee_id,salary FROM employees;
2.2打开游标
定义好游标后,如果想要使用它,就得打开这个游标
打开游标的时候,select语句的查询结果集就会送到游标工作区,为后面游标的逐条读取结果集中的记录做准备
语法
open 游标名
2.3使用游标(从游标中取得数据)
语法
fetch 游标名 into var_name…
我们用一个游标来读取当前行,可以把数据保存到变量中,游标指针指到下一行
如果游标读取的数据有多个列,我们可以在into后面赋值给多个变量
var_name要在游标声明之前定义好
游标查询的结果集中的字段数必须要和into后面的变量数一样,不然在存储过程执行的时候会报错。
2.4关闭游标
- 语法: close 游标名
- 因为使用游标会占用系统资源,所以需要及时关闭,如果没有及时关闭,游标会一直保存到存储过程结束,影响系统运行的效率,关闭游标可以释放游标占用的系统资源。
- 关闭游标后,我们就不能再检索查询结果中的数据行,如果需要检索的话,就需要再次打开游标。
3.案例演示
创建存储过程“get_count_by_limit_total_salary()”
声明IN参数 limit_total_salary,DOUBLE类型;声明OUT参数total_count,INT类型。
函数的功能可以实现累加薪资最高的几个员工的薪资值,直到薪资总和达到limit_total_salary参数的值,返回累加的人数给total_count。
DELIMITER //
CREATE PROCEDURE get_count_by_limit_total_salary(IN limit_total_salary DOUBLE,OUT total_count INT)
BEGIN
DECLARE sum_salary DOUBLE DEFAULT 0; #记录累加的总工资
DECLARE cursor_salary DOUBLE DEFAULT 0; #记录某一个工资值
DECLARE emp_count INT DEFAULT 0; #记录循环个数
#定义游标
DECLARE emp_cursor CURSOR FOR SELECT salary FROM employees ORDER BY salary DESC;
#打开游标
OPEN emp_cursor;REPEAT #使用游标(从游标中获取数据) FETCH emp_cursor INTO cursor_salary; SET sum_salary = sum_salary + cursor_salary; SET emp_count = emp_count + 1; UNTIL sum_salary >= limit_total_salary END REPEAT; SET total_count = emp_count; #关闭游标 CLOSE emp_cursor;END //
DELIMITER ;

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

【限时福利】21天学习挑战赛 - MySQL从入门到精通

【Network Security Column Directory】--Penguin Column Navigation

【Nacos】解决Nacos下载速度缓慢的问题
![[Limited Time Bonus] 21-Day Learning Challenge - MySQL from entry to mastery](/img/12/f9fe60c7fc3d376aa95a4756541b61.png)
[Limited Time Bonus] 21-Day Learning Challenge - MySQL from entry to mastery

外包干了三年,废了...

DPW-SDNet: Dual Pixel-Wavelet Domain Deep CNNsfor Soft Decoding of JPEG-Compressed Images

Image Restoration by Estimating Frequency Distribution of Local Patches

Teach you how to build a permanently running personal server

Automatically generate test modules using JUnit4 and JUnitGenerator V2.0 in IDEA

KingbaseESV8R6 snapshot too old的配置和测试
随机推荐
LeetCode·Daily Question·952. Calculate Maximum Component Size by Common Factor·Union Check
GPGGA NTRIP RTCM Notes
JS中获取元素属性的8大方法
深度学习模型训练前的必做工作:总览模型信息
What is the common factor
数据质量提升
【零代码工具】15 款企业级零代码开发平台推荐,总有一款是你心仪的
巴比特 | 元宇宙每日必读:洗牌将至,数藏行业下半场是否会迎来新一批领头羊?是否会出现新玩法?...
MySQL笔记2(函数,约束,多表查询,事务)
(7/29)基础板子最小生成树prim+kruskal
手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践
共用体、共用体与结构体的区别、枚举之C语言犄角旮旯的知识
三层架构简单配置
MySQL60 homework
系统结构考点之PM2I单级网络
Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上
Babbitt | Metaverse Daily Must Read: The shuffling is coming, will the digital Tibetan industry usher in a new batch of leaders in the second half?Will there be new ways to play?...
Navigation Bar----Personal Center Dropdown
如何制作deb包
tcp协议传输中的粘包问题