mysql cursor 游标

以下说明基于mysql 5.5。

概述:我知道大部分人对于mysql游标使用的不多。mysql大多数情况可以用“集合”操作,即可满足90%的需求。mysql cursor作为对“记录”操作,是操作数据的一种补充。

mysql cursor三大特性(大三“坑”):

1、只读的:cursor本身不提供修改数据的操作,只能fetch columns into variables。(当然你可以把数据拿出来以后,再用update语句操作一下,但是有坑,第三点说明)。

2、不能滚动的:只能向一个方向遍历数据,不能回滚,不能随意进退,不能跳过某些记录。

3、数据敏感的(大坑):游标分为两类,一类为数据敏感类型的游标,一类为非数据敏感类型的游标。

  • 数据敏感类型游标:游标指向实际的数据,遍历数据时,如果其他session修改了当前cursor遍历的数据集合,会影响当前游标的行为。
  • 非数据敏感类型游标:游标查询的数据集合放入到一个临时表中,游标指向临时表的记录集合。
  • mysql cursor: 是数据敏感类型游标。
  • 基于以上说明: 不要在mysql游标打开的表上更新数据。(也有部分资料说:不要更新游标声明语句中select statement的where条件字段)

mysql cursor无关紧要的特性:

1、游标只能在存储过程中使用,包含在BEGIN ... END statement中。

2、需要close cursor关闭游标,释放资源。其实如果不释放,在END statement结束以后,自动释放cursor。

3、游标的声明语句必须放在所有变量的声明语句之后。

4、游标的声明语句必须关联select statement。

5、定义一个CONTINUE HANDLER FOR NOT FOUND,可以帮助游标在fetch no data的时候,跳出fetch循环。

6、CONTINUE HANDLER FOR NOT FOUND 这个条件不仅仅针对游标没有找到数据会触发,针对其他select statement(在没有检索到数据的情况下)也会触发。

时间: 2024-08-02 23:59:50

mysql cursor 游标的相关文章

cursor游标(mysql)

/* 游标 cursor 什么是游标?为什么需要游标 使用存储过程对sql进行编程的时候,我们查询的语句可能是数据是多个,它总是一口气全部执行,我们无法针对每一条进行判断.也就是说,我们无法控制程序的运行,所以引入了游标cursor cursor类似于java中的迭代器. 它利用查询语句生成一个游标,然后游标中有一个类似指针的东西.首先指在游标首,就是迭代器.不解释了 cursor 游标 declare声明: declare 游标名 cursor for select_statement; op

mysql中游标在存储过程中的详细用法

昨天写的一个东东,分享下给大家. drop PROCEDURE  if exists sp_cleanUserData; CREATE  PROCEDURE `sp_cleanUserData`() BEGIN /*定义游标*/ declare v_dt bigint(20) default 0 ; declare v_num INT DEFAULT 0; /*游标循环到末尾时给定义的常量赋值*/ declare cur_userId   CURSOR FOR select  userId fr

MySQL Cursor

Summary: in this tutorial, you will learn how to use MySQL cursor in stored procedures to iterate through a result set returned by a SELECT statement. Introduction to MySQL cursor To handle a result set inside a stored procedure, you use a cursor. A

【PLSQL】变量声明,结构语句,cursor游标

************************************************************************   ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************ PLSQL是ORACLE在标准SQL基础上增加了过程化处理,把DML和SELECT语句组织在PLSQL代码的过程性单元中. PLS

转 oracle cursor 游标

转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率. 游标有两种类型:显式游标和隐式游标.在前述程序中用到的SELECT...I

DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)

url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取所有记得路由后面加$结束符 #pub/?format=json url(r'^pub\.(?P<format>\w+)$',views.Pub.as_view({'get':'list','post':'create'})), #pub.json url(r'^pub/(?P<pk>\

SQL Cursor 游标的使用

Contents SQL Cursor 游标的使用 这两天在做新老系统间的data migration,接触到sql的游标,记录总结一下. 我们的需求是要求map多张表,并把计算结果分别更新到一张目标表中, 新旧系统要做A/B Testing, 所以当旧表有任何更新,比如新增,删除,改动, 都要更新到新表中. 原本我选择的方案是采用批量Insert, 但碰到一个需要插入map关系的表, 其中一个field是另外一张表刚刚插入数据的id, 因此只能用循环来解决. 看了一圈SQL的for循环,实现起

MySql使用游标Cursor循环(While)更新数据

#要修改的变量 DECLARE var_ID VARCHAR(50) DEFAULT ''; #需要修改的数据的数量 DECLARE var_UpdateCount INT; #当前循环次数 DECLARE var_WhileTimes INT; #定义游标 DECLARE var_Cur CURSOR FOR SELECT id FROM table_Name; #打开游标 OPEN var_Cur; #将游标的数据进行赋值 FETCH var_Cur INTO var_ID; #获取循环次数

MySQL中游标使用以及读取文本数据

前言 之前一直没有接触数据库的学习,只是本科时候修了一本数据库基本知识的课.当时只对C++感兴趣,天真的认为其它的课都没有用,数据库也是半懂不懂,胡乱就考试过了.现在学习大数据分析,接触了数据挖掘,才感觉到数据库是不可跨越的坎.直到现在才感觉到<操作系统>.<编译原理>.<计算机组成原理>等等课程的重要性.在浩瀚的知识面前,个人是非常渺小的.掌握了一种思想之后,任何事情都不困难,困难的是你是否真的静下心看一看帮助文档.认真的Google.静心.静气.认真.执着. 游标-