mysql游标简易教程

从mysql V5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎。InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键),灾难恢复能力等等。

现在简单总结一下游标的知识。

(一)认识游标(cursor)

游标简单来说就是查询出来的数据索引,通过对游标的操作(第一个位置、最后一个位置、上一个位置、下一个位置)可以遍历出数据。

使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联,因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案——那就是使用游标

就是一个可读的标识,用来标识数据取到什么地方了。

(二)游标特性

1,只读

2,不滚动

3,不敏感的

(三)使用游标

需要强调的是,游标必须在定义处理程序之前被定义,但变量必须在定义游标之前被定义,顺序就是变量定义-游标定义-处理程序。

1.定义游标

DECLARE cursor_name CURSOR FOR select_statement

这个语句声明一个游标。也可以在子程序中定义多个游标,一个块中的每一个游标必须命名唯一。声明游标后也是单条操作的。

2. 游标OPEN

OPEN cursor_name

这个语句打开先前声明的游标。

3. 游标FETCH

FETCH cursor_name INTO var_name [, var_name] ...

这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针至该行。

4. 游标CLOSE

CLOSE cursor_name

这个语句关闭先前打开的游标,注意,用完后必须关闭。

(四)示例

下面是一个存储过程,里面用到游标,逐条更新数据(批量更新数据)

BEGIN

DECLARE  no_more_record INT DEFAULT 0;

DECLARE  pID BIGINT(20);

DECLARE  pValue DECIMAL(15,5);

DECLARE  cur_record CURSOR FOR   SELECT colA, colB from tableABC;  /*首先这里对游标进行定义*/

DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1; /*这个是个条件处理,针对NOT FOUND的条件,当没有记录时赋值为1*/

OPEN  cur_record; /*接着使用OPEN打开游标*/

FETCH  cur_record INTO pID, pValue; /*把第一行数据写入变量中,游标也随之指向了记录的第一行*/

WHILE no_more_record != 1 DO

INSERT  INTO testTable(ID, Value)

VALUES  (pID, pValue);

FETCH  cur_record INTO pID, pValue;

END WHILE;

CLOSE  cur_record;  /*用完后记得用CLOSE把资源释放掉*/

END

mysql游标进阶_mysql进阶(三)游标简易教程相关推荐

  1. mysql游标进阶_MYSQL进阶学习知识拓展一:MySQL 存储过程之游标!

    一.MySQL游标的概念 游标介绍: MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想, ...

  2. mysql 进阶_mysql进阶 - 随笔分类 - 云潇洒 - 博客园

    随笔分类 - mysql进阶 1 摘要:防御SQL注入的方法总结 这篇文章主要讲解了防御SQL注入的方法,介绍了什么是注入,注入的原因是什么,以及如何防御,需要的朋友可以参考下. SQL注入是一类危害 ...

  3. mysql 为游标赋值_mysql 存储过程之游标

    游标按我的理解就是用在sql编程中对查询结果集的解析,类比jdbc中的resultset对象.FETCH 一行游标指针就往下面移动一行,直到所有行被遍历完成. 游标的使用分为4步: 1.定义游标,指定 ...

  4. mysql级联删除_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目

    触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...

  5. mysql 游标异常_mysql中的游标和异常捕捉

    # 第一个用 LOOP方式进行循环的游标测试代码 DROP PROCEDURE IF EXISTS cursor_test; CREATE PROCEDURE cursor_test() BEGIN ...

  6. mysql 存储过程游标删除_mysql数据库存储过程游标循环,提前退出

    需求:向trade这个数据库中的每一个表增加多个字段 遇到问题:存储过程,游标,循环,动态sql执行 注意: mysql 存储过程在我所使用的5.5版本中不能使用 show 的命令,利用 inform ...

  7. mysql cursor 嵌套_MYSQL 存储过程多游标嵌套遍历

    mysql 存储过程临时表.多游标嵌套使用样例: CREATE PROCEDURE method(IN start_Code varchar(10),IN end_Code varchar(10),i ...

  8. mysql select 进阶_MySQL进阶_SELECT篇(一)

    MySQL中SELECT语句的基本语法是: SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DI ...

  9. mysql revoke 用法_mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执行查 ...

最新文章

  1. Django 模板继承4.2
  2. 致远OA如何实施才可行
  3. vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt
  4. Android自定义控件(三)——有弹性的ListView
  5. spark MLlib平台的协同过滤算法---电影推荐系统
  6. java语言基本语法_Java语言基本语法
  7. maven详解之坐标与依赖
  8. 适配器模式(PHP实现)
  9. 联想服务器imm默认地址_命令下配置ip地址
  10. PHP高级——抽象类与接口的区别(转)
  11. 内核kconfig语法及原理
  12. java json字符串转化为list
  13. 软件工程:第一章笔记下
  14. 如何让用html制作404页面,网站404页面怎么做?
  15. 表空间相关命令及查询SQL
  16. BUCTOJ2021年ACM竞赛班训练九题解
  17. 如何使用Google云端硬盘备份和还原WhatsApp消息
  18. Springboot +AOP日志系统
  19. 精美底部营销通用型插件(客服+电话+微信)按钮
  20. 仙人掌[cactus]

热门文章

  1. oracle创建表语句_利用FME去拼接SQL语句并创建表
  2. 光源时间_背光源缩短寿命的原因
  3. LINE: Large-scale Information Network Embedding
  4. NLP-基础知识-007(机器学习-朴素贝叶斯)
  5. 在其他数都出现k次的数组中找到只出现一次的数
  6. YOLO系列阅读(一) YOLOv1原文阅读:You Only Look Once: Unified, Real-Time Object Detection
  7. 机器学习笔记:triplet loss
  8. 滴滴算法大赛算法解决过程 - 拟合算法
  9. mysql设置数据库同步_MySQL数据库配置主从同步
  10. CSDN-markdown编辑器使用指南