我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MYSQL 游标学习及使用实例

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MYSQL 游标学习及使用实例


who?(游标是什么?)
游标(cursor)官方定义:是系统为用户开通的一个数据缓冲区,存放sql执行结果。每个游标区都有一个名字,用户可以通过sql语句逐一从游标中获取记录,并赋值给变量,交由主语言进一步处理;
个人理解:感觉游标和指针相似,指定结果集后一行行执行;

 

why?(为什么要学习游标)
游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;
它还提供对基于游标位置而对表中数据进行删除或更新的能力;
而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

 

what?(游标的生命周期)
--1.声明游标

--2.打开游标

--3.声明游标提取数据所要存放的变量

--4.定位游标到哪一行

 

使用实例

搭配while循环语句使用

# 代码使用目的:update t_shop表中的数据

BEGIN
-- 声明游标存储的变量 DECLARE v_shop_name varchar(255); DECLARE v_shop_area varchar(32); DECLARE done int DEFAULT 0; DECLARE chang_cursor CURSOR for select shop_name,shop_area from t_shop ; -- 游标中内容为空时设置为1 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; -- 打开游标 OPEN chang_cursor; while done = 0 do -- 将游标赋值给对应变量 FETCH chang_cursor into v_shop_name,v_shop_area; if v_shop_name = "冰箱旗舰店" THEN update t_shop set shop_area = "广东深圳" where shop_name = v_shop_name; END IF; end WHILE; -- 关闭游标 close chang_cursor; END

与loop循环语句使用

## 代码目的:统计t_shop表中的数据条数

BEGIN
DECLARE done int DEFAULT 0; DECLARE v_shop_id VARCHAR(32); DECLARE total int DEFAULT 0; DECLARE v_shop_name VARCHAR(255); -- 定义游标 DECLARE count_rnt CURSOR for select shop_id,shop_name from t_shop; -- 设定not found时done数据变化,FETCH获取指向的数据行,并把指针指向下一行,如何已经是最后一行那就会造成游标溢出,从而引发mysql预定义的not found错误,所以可以通过设置变量让溢出时结束 DECLARE CONTINUE HANDLER FOR NOT found set done = 1; -- 打开游标 open count_rnt; -- 设置循环条件 read_loop:loop FETCH count_rnt into v_shop_id,v_shop_name ; if done = 1 THEN leave read_loop; end IF; SET total = total + 1; end LOOP; -- 关闭游标 CLOSE count_rnt; -- 输出结果 select total; END

与repeat循环语句使用



BEGIN
DECLARE v_shop_id VARCHAR(30); DECLARE v_shop_name varchar(255); DECLARE done int default 0; DECLARE v_total int DEFAULT 0; -- 定义游标 DECLARE count_rnt1 CURSOR for select shop_id,shop_name from t_shop where shop_name regexp "美的"; -- 定义游标溢出的 DECLARE CONTINUE HANDLER FOR NOT found set done = 1; -- 打开游标 open count_rnt1; -- 循环语句 REPEAT FETCH count_rnt1 into v_shop_id,v_shop_name; if done = 0 THEN set v_total = v_total + 1; end if ; UNTIL done = 1 end repeat; -- 关闭游戏 CLOSE count_rnt1; select v_total; END

 

 

 


备注:相关知识
种类
MS SQL SERVER 支持三种类型的游标:Transact_SQL 游标,API服务器游标和客户游标。
(1)Transact_SQL 游标
  Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。 Transact_SQL 游标不支持提取数据块或多行数据。
(2)API游标
  API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或DB_library 的动态链接库(DLL) 都会将这些客户请求传送给服务器以对API游标进行处理。
(3)客户游标
  客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于服务器游标并不支持所有的Transact-SQL语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。由于API 游标和Transact-SQL 游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。在本章中我们主要讲述服务器(后台)游标。

游标的分类
  根据游标检测结果集变化的能力和消耗资源的情况不同,SQL Server支持的API服务器游标分为一下4种:

静态游标 : 静态游标的结果集,在游标打开的时候建立在TempDB中,不论你在操作游标的时候,如何操作数据库,游标中的数据集都不会变。例如你在游标打开的时候,对游标查询的数据表数据进行增删改,操作之后,静态游标中select的数据依旧显示的为没有操作之前的数据。如果想与操作之后的数据一致,则重新关闭打开游标即可。
动态游标 : 这个则与静态游标相对,滚动游标时,动态游标反应结果集中的所有更改。结果集中的行数据值、顺序和成员在每次提取时都会变化。所有用户做的增删改语句通过游标均可见。如果使用API函数或T-SQL Where Current of子句通过游标进行更新,他们将立即可见。在游标外部所做的更新直到提交时才可见。
只进游标:只进游标不支持滚动,只支持从头到尾顺序提取数据,数据库执行增删改,在提取时是可见的,但由于该游标只能进不能向后滚动,所以在行提取后对行做增删改是不可见的。
键集驱动游标:打开键集驱动游标时,该有表中的各个成员身份和顺序是固定的。打开游标时,结果集这些行数据被一组唯一标识符标识,被标识的列做删改时,用户滚动游标是可见的,如果没被标识的列增该,则不可见,比如insert一条数据,是不可见的,若可见,须关闭重新打开游标。 静态游标在滚动时检测不到表数据变化,但消耗的资源相对很少。动态游标在滚动时能检测到所有表数据变化,但消耗的资源却较多。键集驱动游标则处于他们中间,所以根据需求建立适合自己的游标,避免资源浪费。

参考:https://blog.csdn.net/xiansheng0813/article/details/91322716

https://www.cnblogs.com/cjm123/p/8619942.html

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MYSQL 游标学习及使用实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MYSQL 游标学习及使用实例

who?(游标是什么?)游标(cursor)官方定义:是系统为用户开通的一个数据缓冲区,存放sql执行结果。每个游标区都有一个名字,用户可以通过sql语句逐一从游标中获取记录,并赋值给变量,交由主语言进一步处理;个人理解:感觉游标和指针相似,指定结果集后一行行
2015-05-28

mysql游标的原理与用法实例分析

本文实例讲述了mysql游标的原理与用法。分享给大家供大家参考,具体如下: 本文内容:什么是游标创建游标使用游标首发日期:2018-04-18什么是游标:如果你前面看过mysql函数,会发现无法使用返回多行结果的语句。但如果你又确实想要使用
2022-05-12

Android游戏开发学习之引擎用法实例详解

本文实例讲述了Android游戏开发学习之引擎用法。分享给大家供大家参考。具体如下: 汽车引擎是汽车的心脏,其决定了汽车的性能和稳定性,是人们在购车时相当关注的。而游戏中的物理引擎就如汽车的引擎一样,占据了非常重要的位置。一款好的物理引擎可
2022-06-06

PHP Class用法实例解析:学习如何定义和使用类

在PHP编程中,类(Class)是一种非常重要的概念,它可以帮助我们更好地组织和管理代码,并且提高代码的复用性和可维护性。本文将通过实例解析的方式,讲解如何定义和使用PHP类,同时提供具体的代码示例帮助读者更好地理解。1. 类的定义在P
PHP Class用法实例解析:学习如何定义和使用类
2024-03-11

mysql学习笔记之完整的select语句用法实例详解

本文实例讲述了mysql学习笔记之完整的select语句用法。分享给大家供大家参考,具体如下: 本文内容:完整语法去重选项字段别名数据源wheregroup byhavingorder bylimit首发日期:2018-04-11完整语法:
2022-05-20

MongoDB实现查询、分页和排序操作以及游标的使用

一、Find查询事前准备:插入如下数据db.Students.insert([{ _id:1, name:"Zhao", age:25, country:"USA", books:["js","C++","EXTJS","Mongo
2022-07-08

Mysql索引分类及其使用实例详解

目录mysql的索引分类单列索引创建单列索引的几种方式:唯一索引创建唯一索引的几种方式:联合索引(复合索引)创建联合索引(复合索引)的方式:Mysql的索引类型INDEX | NORMAL 普通索引UNIQUE 唯一索引PRIMARY KE
2022-07-19

dedecms友情链接标签flink使用说明及实例代码

DEDEcms的友情链接标签flink用于获取友情链接,其对应后台文件为"includetaglibflink.lib.php", 图片 复制代码代码如下: {dede:flink row='24' type='image' titlele
2022-06-12

编程热搜

目录