mysql begin end 用法_MySQL ------ 游标(CURSOR)(二十六)

MySQL执行检索操作会返回一组称为结果集的行,这组返回的行都是与SQL 语句相匹配的行(零行或多行),但是,使用简单的select 语句,没有办法得到第一行、下一行、或前十行,也不存在一行地处理所有行简单方法(也就是成批地处理它们),而有时,需要在检索出来的行中前进或后退一行或多行,怎么办来,之前了解的很难实现,那么本节的游标就可实现,,

游标(cursor)一个存储在mysql服务器上数据库查询,它不是一条select 语句,而是被语句检索出来的结果集。

好处:在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

主要用于:交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。

注意:不像多数DBMS,MySQL游标只能用于存储过程和函数。

版本:MySQL 5 添加了对游标的支持,要使用的话MySQL版本需要在mysql 5 及以后的版本

one、注意使用游标的主要步骤:

1、在能够使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,他只是使用select 语句。

2、一旦声明后,必须打开游标以供使用。这个过程用前面定义的select 语句把数据实际检索出来

3、对于填有数据游标,根据需要取出(检索)各行。

4、在结束游标使用时,必须关闭游标

在声明游标后,可根据需要频繁地打开和关闭游标。在游标打开后,可根据需要频繁地执行取操作。

two、创建游标

游标用declare 语句创建。DECLARE 命名游标,并定义相应地select 语句,根据需要带where 和其他子句。

下面在存储过程中使用declare 定义一个游标,存储过程完成后游标也相应消失。

-- declare  游标名称 cursor for 查询语句 

b48b0bb77238b05b41866cafc2c073c3.png

打开和关闭游标

---  OPEN 游标名;

在处理open 语句时执行查询,存储检索出地数据以供浏览和滚动游标处理后,要关闭游标

---  CLOSE 游标名; 

close会释放游标使用的所有内部内存和资源,所有游标使用后都要进行关闭操作

在一个游标关闭后,如果没有重新打开,则不能使用它。但是使用声明过的游标不需要再次声明,使用open 语句打开就行。

如果不明确的关闭游标,mysql 将会在到达end 语句的时候自动关闭它。

上述可以修改为:

mysql

d9ca0e946b10c47598894f3db4589473.png

上述的存储过程声明、打开和关闭一个游标,但对检索出的数据什么也没有做

three、使用游标数据 FETCH

在一个游标被打开后,可以使用 fetch 语句分别访问它的每一行。

fetch 指定检索什么数据(所需的列),检索出来的数据存储在什么地方。还向前移动游标中的内部指针,使下一条fetch语句检索下一行(避免重复读取一行)。

--  从游标中检索单个行(第一行)

6c7b14f1a8bd3586e52376eb6df461ab.png

fetch 检索当前行的order_num 列(将自动从第一行开始)买到一个名为onum 的局部变量中,对检索出的数据不做任何处理。

-- 循环检索数据,从第一行到最后一行

b749ad104bfaa17691e586396f65b8e1.png

上述使用fetch 检索当前order_num 到声明为onum 的变量中,但是 这个fetch 在repeat 内,因此他会反复执行直到done 为真(由nutil done end repeat ;规定)为使它起作用用一个defaut 0 定义变量 done ,那么done 根据以下代码设置为真

declare continue handler for sqlstate '02000' set done=1;

上述,定义了一个CONTINUE HANDLER(继续处理程序) ,他是在条件出现时执行的代码,这里是指当SQLSTATE '02000' 出现时,SET done =1.

SQLSTATE '02000' 是一个未找到条件,当REPEAT 由于没有更多的行供循环而不能继续时出现

four、注意:

1、declare 语句的发布存在特定的次序,用户declare 语句定义的局部变量必须定义任意游标或句柄之前的定义,而句柄必须在游标之后定义,不遵守此顺序将产生错误信息。

2、如果调用这个存储过程,他将定义几个变量和一个continue handler ,定义并打开一个游标,重复读取所有的行,然后关闭游标。如果一切正常可以在循环内放入任意需要的处理(在fetch 语句之后,循环结束之前)

3、除了repeat 语句外,MySQL 还支持循环语句,它可以用来重复执行代码,直到使用 LEAVE 语句手动退出为止,通常REPEAT 语句的语法使它更适合于对游标进行循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

treeview控件怎么折叠_拍摄的视频闪烁怎么办?一招就能搞定,电脑手机都适用...

视频拍摄/视频剪辑教程/新媒体大家好我是学拍视频剪辑的黑米老师很多剪辑师在剪辑时,总会收到一些视频画面闪烁的素材,这是因为机器观察到的色彩和人肉眼观察到的色彩不一样,当曝光变化比较明显时,机器会捕捉到一些肉眼观察不到的…

rocketmq 消息指定_进大厂必备的RocketMQ你会吗?

点击关注"故里学Java"右上角"设为星标"好文章不错过关于消息队列,相信大家都不陌生,现在的中大型项目中或多或少都有使用到消息队列,对于消息队列大家可能都有一定的了解,使用消息队列可以解决什么样的问题&a…

秦丝软件的服务器稳定吗,强烈推荐 | 最好的五款服装进销存软件排名

随着企业的发展和市场的需要,传统的手工记录法复杂而繁琐,且错误较多费时费力,尤其是服装行业,涉及的品牌众多,需要管理的货品数量多,质量参差不齐,经营管理越来越困难。在此,小编为…

c语言putchar_C语言实现变色的心!连机器都会变心,呵,男人!

各位,今天我们用C语言来秀一把,给大家带来一个会自动变色的心:怎么样,效果还可以吧!其实这个实现的原理还是比较简单的,为了让窗口别跟控制台那样难看,我调用了system函数对窗口的大小、颜色和标…

git灰度发布版本_Git发布2.30版本

Git 2.30版本已于北京时间今天凌晨3点发布,是该广受欢迎的分布式修订版本控制系统的最新稳定版本更新,Git由Linux内核发明者Linus大神于2005年推出。2020年早些时候,Git 2.28版本带来了对可配置/默认分支名称的支持,以取代到目前为…

匿名的ftp服务器不允许用户上传文件对吗,FTP服务器匿名用户也能上传文件的配置...

FTP服务器匿名用户也能上传文件的配置[日期:2006-12-05]来源:作者:[字体:大 中 小]环境:RedHat 7.3 wu-ftp-2.6.2 proftpd-1.2.4步骤:1.wu-ftpa.从RedHat的光盘上安装wu-ftpd-2.6.2-5.i386.rpm和anonftp-4.0-9.i386.rpm这两个包# …

mongdb2008puls4.0.3安装_Mathematica 10.3安装教程

软件下载[软件名称]:Mathematica v10.3[软件语言]:简体中文 [软件大小]:2.26G[安装环境]:Win10/Win8/Win7[下载链接]:https://pan.baidu.com/s/1fDUUrR-W8IIj8Dem3YZMrQ[提取码]&…

python接口 同花顺_利用python探索股票市场数据指南

虽然同花顺之类的金融理财应用的数据足够好了,但还是有自己定制的冲动, 数据自然不会不会比前者好很多,但是按照自己的想法来定制还是不错的。目标通过免费的数据接口获取数据,每日增量更新标的历史交易数据, 然后通过Kibana做可视化及数据分…

java ee是什么_死磕 java集合之HashSet源码分析

问题(1)集合(Collection)和集合(Set)有什么区别?(2)HashSet怎么保证添加元素不重复?(3)HashSet是否允许null元素?&#xf…

ubuntu wifi固定ip_自制wifi遥控小车!ESP8266实践指南(二)

上次带大家利用ESP8266自制了wifi控制的LED点阵屏幕,大家觉得怎么样呢? 手把手教你用wifi控制显示屏!ESP8266实践指南(一)今天我们来做点更有意思的~ wifi遥控小车!一、所需材料ESP8266 NodeMCU开发板:这次我们使用CP2…

micopython 18b20_[MicroPython]stm32f407控制DS18B20检测温度

1.实验目的 1. 学习在PC机系统中扩展简单I/O 接口的方法。 2. 进一步学习编制数据输出程序的设计方法。 3. 学习DS18B20的接线方法,并利用DS18B20检测当前温度。 2.所需元器件 F407Micropython开发板1块 数据线1条 DS18b20温度传感器1个 DS18B20测温模块(不含DS18B2…

float php 运算_写给 PHP 程序员的 Python 学习指南

文 | 汤青松SegmentFault编辑 | EarlGrey推荐 | 编程派公众号(ID:codingpy)一、背景人工智能这几年一直都比较火,笔者一直想去学习一番;因为一直是从事PHP开发工作,对于Python接触并不算多,总是在关键时候面临着 基础不…

类似ftp文件服务器有哪些,FTP的替代品有哪些,你知道吗?

在某些情况下,需要从服务器上传(或下载)文件。多年来,最流行的文件传输方法是文件传输协议(FTP)。FTP的一大优点是它支持断点续传。FTP收获了方便性,却在安全性上有所欠缺。FTP未加密,这意味着格式是开放的,文件可能在…

case里面两个条件_Go语言条件语句之 switch 语句

点击上方蓝色 “铁匠学编程” 关注我,让我们一起学习!switch语句会根据传入条件不同,选择不同的分支执代码进行执行,他可以代替多个 if else 子句,Go 语言的分支语句和 PHP 的类似,Go 不需要显示的通过brea…

api 二次 开发 禅道_浅谈-软件开发流程

先直接放出我对软件开发的相关人员职责和流程:图一:软件开发的相关人员职责以下是截屏的开发流程泳道图:横轴是相关开发人员的工作模块;纵轴是从上至下开发时序周期。图二:软件开发的流程图从职责图和流程图对应到我们…

光遇安卓服务器维修,《光遇》渠道服更换手机解决办法

《光遇》游戏中渠道服更换手机怎么办?很多小伙伴更换手机后登陆游戏发现自己还需要重头开始,很多小伙伴表示不知道怎么找回之前的渠道服账号和数据?当然IOS玩家不用担心,如果更换IOS可以继续使用账号,但是IOS更换安卓是…

线程中task取消_Rust Async: async-task源码分析

async-std是rust异步生态中的基础运行时库之一,核心理念是合理的性能 用户友好的api体验。经过几个月密集的开发,前些天已经发布1.0稳定版本。因此是时候来一次深入的底层源码分析。async-std的核心是一个带工作窃取的多线程Executor,而其本…

extjs 方法执行顺序_TestNG之注解变压器amp;方法拦截器

一.注解变压器TestNG允许在执行期间修改所有注解的内容。当源代码中的注解大部分是正确的,但是有一些时刻你想要重写他们的值时,这个是非常有用的。可以使用注解变压器实现。注解变压器是一个实现了接口的类:public interface IAnnotationTra…

服务器升级中暂不可修改怎么回事,抖音服务器升级中,暂不支持本地区开播抖音怎么在法国直播?...

抖音服务器升级中,暂不支持本地区开播抖音怎么在法国直播?除了餐饮,腾讯自主研发的各种跨界开发节目也无人问津。至于年初腾讯app项目和资源,还没有整体发布,不过,神似的行业信息也有公布。这其中对爆红的博…

keil 查看 stm32 io波形_你知道 KEIL 自带示波器吗?

导读:很多时候我们并不满足于查看变量的值,可能还想看这个变量的历史变化,同时以波形的方式显示出来,这就需要了解 KEIL 另一个有趣的东西:逻辑分析仪。效果图:以 STM32F103RET6,外接 8M 晶振&a…