MySQL游标(cursor) 定义及使用

概念

游标(Cursor)它使用户可逐行访问由SQL?Server返回的结果集。?
使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。

用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。

游标机制允许用户在SQL?server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。

优点

1、允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作。

2、提供对基于游标位置的表中的行进行删除和更新的能力。

3、游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。

原理

游标就是把数据按照指定要求提取出相应的数据集,然后逐条进行数据处理。

使用游标的顺序

?声名游标、打开游标、读取数据、关闭游标、删除游标。

使用游标(cursor)

1.声明游标

DECLARE cursor_name CURSOR FOR select_statement
这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。

2. 游标OPEN语句

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

3. 游标FETCH语句

FETCH cursor_name INTO var_name [, var_name] ...这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。

4. 游标CLOSE语句

CLOSE cursor_name  这个语句关闭先前打开的游标。

特性

1,只读的,不能更新的。
2,不滚动的
3,不敏感的,不敏感意为服务器可以活不可以复制它的结果表

游标(cursor)必须在声明处理程序之前被声明,并且变量和条件必须在声明游标或处理程序之前被声明。

delimiter $$
create procedure pa(out sum bigint)
  begin

    declare iii int;

    declare done int default 0;
    # 1、游标的定义
    declare c_person cursor for select id from randtable;
    # 捕获系统抛出的 not found 错误,如果捕获到,将 done 设置为 1  相当于try异常
    declare continue handler for not found set done=1;
    set sum=0;
    # 2、打开游标
    open c_person;

    www:loop
      # 3、使用游标
      fetch c_person into iii;
      # 如果发生异常
        if done = 1 then

          leave www;
        end if ;

      set sum = sum +iii ;
    end loop ;
    # 4、关闭游标
    close c_person;
    end $$
    delimiter  ;

-- 调用
set @sum = 0;
call pa(@sum);
select @sum;

原文地址:https://www.cnblogs.com/weibanggang/p/9678108.html

时间: 2024-12-14 07:07:00

MySQL游标(cursor) 定义及使用的相关文章

MySQL游标的简单实践

Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行,简单的select语句成批地进行处理,需要在检索出来的行中前进或后退一行或多行--若是想得到其中的每一行进行处理,就必须使用游标. Q:什么是游标? A: 游标(cursor),是一个存储在MySQL服务器上的数据库查询,游标不是一条 SELECT语句,而是被该语句检索出来的结果集:可以看做是指向

[转]MySQL游标的使用

转自:http://www.cnblogs.com/sk-net/archive/2011/09/07/2170224.html 以下的文章主要介绍的是MySQL游标的使用笔记,其可以用在存储过程的SQL语句,其主要类型主要有以下几种,以下就是对其详细介绍,相信如果你掌握了这项技术,会在以后的学习或是工作中带来很大的帮助. 1. 无返回结果语句,如:INSERT,UPDATE,DROP, DELETE等 2. select语句返回单行变量并可传给本地变量(select ..into) 3. 返回

mysql游标示例 mysql游标简易教程

从mysql V5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎.InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键),灾难恢复能力等等. 现在简单总结一下游标的知识. (一),认识游标(cursor) 就是一个可读的标识,用来标识数据取到什么地方了. (二),游标特性 1,只读 2,不滚动 3,不敏感的 (三),使用游标 需要强调的是,游标必须在定义处理程序之前被定义,但变量必须在定义游标之前被定义,顺序就是变量定义-游标定义-处理程

SqlServer和MySQL游标学习

一 sqlserver游标使用 /*** 游标的使用  讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱.  使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1声明游标 最简单游标声明:DECLARE <游标名>CURSOR FOR<SELECT语句>: 其中select语句可以是简单查询,也可以是复杂的接连查询和嵌套查询 例子: [已表2 AddSalary为例子] Declare mycursor cursor for select *

MySQL游标操作指南

本篇文章是对MySQL游标的具体使用进行了详细的分析介绍,需要的朋友参考下 测试表 level  代码如下: create table test.level (name varchar(20)); 再 insert 些数据 ; 初始化 代码如下: drop procedure if exists useCursor // 建立 存储过程 create 代码如下: CREATE PROCEDURE useCursor() BEGIN 局部变量的定义 declare 代码如下: declare tm

MySQL游标使用

游标的作用:游标提供了一种对从表中检索出的数据进行操作的灵活手段.通过使用游标,使SQL这种面向集合的语言有了面向过程开发的能力. 如何使用游标: 在MySQL数据库中,可以在存储过程.函数.触发器.或者事件中使用游标.使用时需要与handler一起,并且游标要在handler之前定义.游标具有三个属性:(1)Asensitive:数据库也可以选择不复制结果集:(2)Read only:不可更新:(3)Nonscrollable:游标只能向一个方向前进,并且不可以跳过任何一行数据. 使用时,首先

MYSQL 游标学习及使用实例

who?(游标是什么?)游标(cursor)官方定义:是系统为用户开通的一个数据缓冲区,存放sql执行结果.每个游标区都有一个名字,用户可以通过sql语句逐一从游标中获取记录,并赋值给变量,交由主语言进一步处理;个人理解:感觉游标和指针相似,指定结果集后一行行执行; why?(为什么要学习游标)游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作:它还提供对基于游标位置而对表中数据进行删除或更新的能力:而且,正是游标把作为面向集

SQL Server 数据库的维护(四)__游标(cursor)

--维护数据库-- --游标(cursor)-- --概述: 注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制.可以将游标理解为指针.指针指向哪条记录,哪条记录即是被操作记录. 游标处理结果集的方式: 1)允许定位在结果集的指定位置行. 2)从结果集的当前位置检索一行或一部分行记录. 3)支持对结果集当前位置做数据修改.删除等操作. --使用游标 注:使用游标定位和操作数据记录的一般步骤为:声明游标.打开游标.抽取数据.关闭游标和释放

分组PARTITION BY及游标CURSOR的用法

基础数据表: select * from dbo.RecommendationChanelVersionRelation: 数据如下: 要求按照ChannelVersionID分组,对每组中的OrderId根据ID由小到大的顺序,更新为1,2,3,4,5... 方法一(分组PARTITION BY): IF OBJECT_ID('tempdb..#tempdt') IS NOT NULLDROP TABLE #tempdt;select RowNumOrderByChannelVersionID