当前位置: 首页 > news >正文

【第二十二部分】游标

【第二十二部分】游标


文章目录

  • 【第二十二部分】游标
  • 22. 游标
    • 22.1 游标的定义
    • 22.2 游标的使用
    • 22.3 游标优缺点
  • 总结


22. 游标

22.1 游标的定义

当我们筛选条件的时候,虽然可以使用WHERE或者HAVING去选出我们想要的字段,但是去无法将一大块的结果集进行遍历,从而更加细致的处理数据。

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


22.2 游标的使用

  1. 声明游标 DECLARE 游标名 CURSOR FOR 写sql语句;
  2. 打开游标 OPEN 游标名;
  3. 使用游标 FETCH 游标名 INTO variable_name; 表示游标来读取当前行,并且将数据保存到 variable_name如果游标读取的数据行有多个列名,则在 INTO 关键字后面赋值给多个变量名即可
  4. 关闭游标 CLOSE 游标名;

举例说明

# 创建存储过程“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 cur_salary DOUBLE DEFAULT 0.0; # 存储当前游标所指向的数据DECLARE sum_salary DOUBLE DEFAULT 0.0; # 总金额DECLARE t_count INT DEFAULT 0;# 声明游标DECLARE cursor_name CURSOR FOR SELECT salary FROM employees ORDER BY salary DESC;# 打开游标OPEN cursor_name;WHILE sum_salary <= limit_total_salary DO# 使用游标# 该操作是将当前所指向的数据存储到cur_salary变量中FETCH cursor_name INTO cur_salary;# 累加SET sum_salary = sum_salary + cur_salary;SET t_count = t_count + 1;END WHILE;SET total_count = t_count;# 关闭游标CLOSE cursor_name;
END //
DELIMITER ;CALL get_count_by_limit_total_salary(70000,@total_count);
SELECT @total_count;

22.3 游标优缺点

优点

  1. 能够更加细致的处理数据,达到预期效果
  2. 游标可以在存储程序中使用,效率高,程序也更加简洁
  3. 操作灵活,可以对结果集进行逐行定位

缺点:使用游标的过程中,会对数据行进行加锁,这样在业务并发量大的时候,不仅会影响业务之间的效率,还会消耗系统资源,造成内存不足,这是因为游标是在内存中进行的处理。


总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

http://www.lryc.cn/news/17780.html

相关文章:

  • 【面试题】2023高频前端面试题20题
  • Spring解决循环依赖为什么需要三级缓存?
  • Android源码分析 - 回顾Activity启动流程
  • PDMS二次开发(一)——PML类型程序类型与概念
  • 一文揭晓:手机号码归属地api的作用是什么?
  • 电容的结构分类介质封装及应用场景总结
  • 数据结构初阶——时间复杂度与空间复杂度
  • 深度学习之“制作自定义数据”--torch.utils.data.DataLoader重写构造方法。
  • #G. 求约数个数之六
  • 如何为Java文件代码签名及添加时间戳?
  • Xamarin.Forsm for Android 显示 PDF
  • RK3399平台开发系列讲解(LED子系统篇)LED子系统详解
  • LeetCode 432. 全 O(1) 的数据结构
  • 再析jvm
  • 社招前端二面面试题总结
  • 人人能读懂redux原理剖析
  • uniCloud云开发----7、uniapp通过uni-swiper-dot实现轮播图
  • IM即时通讯构建企业协同生态链
  • Python实现构建gan模型, 输入一个矩阵和两个参数值,输出一个矩阵
  • 开学准备哪些电容笔?ipad触控笔推荐平价
  • 放下和拿起 解放自己
  • 100%BIM学员的疑惑:不会CAD可以学Revit吗?
  • 经常会采坑的javascript原型应试题
  • 完全背包—动态规划
  • 消息队列MQ介绍
  • C语言进阶(八)—— 链表
  • 手工测试用例就是自动化测试脚本——使用ruby 1.9新特性进行自动化脚本的编写
  • RockerMQ简介和单节点部署
  • SFP光纤笼子 别称 作用 性能要点 工程要素
  • [HarekazeCTF2019]Easy Notes