以前一直不知道游标的作用,之前的结果集遍历 博主一直用的是记录查询出来的记录总数并一条条用LIMIT 1 OFFSET index 进行查找,并进行处理的。

现在终于会使用游标了,献上一个小例子供大家参考。

其中的MySQL handler触发器请大家参考以下博文 : http://blog.itpub.net/26952448/viewspace-731331/

其主要类型主要有以下几种,以下就是对其详细介绍,相信如果你掌握了这项技术,会在以后的学习或是工作中带来很大的帮助。

1、 无返回结果语句,如:INSERT,UPDATE,DROP, DELETE等

2、 select语句返回单行变量并可传给本地变量(select ..into)

3、 返回多行结果集的select语句,并可使用MySQL游标循环处理

注意,存储过程返回的多行结果集,可以被客户端程序(如php)所接收,但要在一个存储过程中接收另一个存储过程的结果集是不可能的,一般解决办法是存入临时表供其它过程共用

4、 prepare语句

以下主要讲述游标及prepare部分

游标

定义

DECLARE cursor_name CURSOR FOR SELECT_statement;

游标操作

OPEN 打开游标

OPEN cursor_name;

FETCH 获取游标当前指针的记录,并传给指定变量列表,注意变量数必须与MySQL游标返回的字段数一致,要获得多行数据,使用循环语句去执行FETCH

FETCH cursor_name INTO variable list;

CLOSE关闭游标

CLOSE cursor_name ;

注意:MySQL的游标是向前只读的,也就是说,你只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录.

注意关闭游标再打开游标会回到结果集第一条记录。故游标可以复用。

一个完整的小例子:

CREATE PROCEDURE testEndHandle()

BEGIN

DECLARE done BOOLEAN DEFAULT 0;

DECLARE tmp_uid INT DEFAULT 0;

DECLARE tmp_uage INT DEFAULT 0;

DECLARE tmp_uname VARCHAR(255);

DECLARE t_index CURSOR FOR SELECT t_user.user_id, t_user.user_age, t_user.user_name FROM t_user;

-- 写法一:DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

-- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- 写法二:DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN t_index;

REPEAT

FETCH t_index INTO tmp_uid,tmp_uage,tmp_uname;

IF done!=1 THEN

SELECT tmp_uid,tmp_uage,tmp_uname;

END IF;

UNTIL DONE END REPEAT;

CLOSE t_index;

END;

DROP PROCEDURE IF EXISTS testEndHandle;

call testEndHandle();

需要注意的是终止条件设置的位置。由于只有达到结果集的最后一条语句 再次执行FETCH才会设置done为1。

所以如果不像这样设置会取出8条记录,最后一条记录会被重复取出

需要注意的代码:

FETCH t_index INTO tmp_uid,tmp_uage,tmp_uname;

IF done!=1 THEN

SELECT tmp_uid,tmp_uage,tmp_uname;

END IF;

原文:https://blog.csdn.net/u010003835/article/details/50716610

自己实例:

DROP PROCEDURE IF EXISTS testEndHandle;

delimiter $$

CREATE PROCEDURE testEndHandle()

BEGIN

DECLARE done BOOLEAN DEFAULT 0;

DECLARE tmp_uid INT DEFAULT 0;

DECLARE tmp_uage INT DEFAULT 0;

DECLARE tmp_region VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

DECLARE t_index CURSOR FOR SELECT region from comsumer10 where country='中国' GROUP BY region;

-- 写法一:DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

-- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- 写法二:DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN t_index;

REPEAT

FETCH t_index INTO tmp_region;

IF done!=1 THEN

#create table results as SELECT country,region,city,count(*),sum(coin) from comsumer10 where region=tmp_region GROUP BY city ORDER BY sum(coin) desc;

#insert into results SELECT country,region,city,count(*),sum(coin) from comsumer10 where region=tmp_region GROUP BY city ORDER BY sum(coin) desc;

SELECT country,region,city,count(*),sum(coin) from comsumer10 where region=tmp_region GROUP BY city ORDER BY sum(coin) desc;

END IF;

UNTIL DONE END REPEAT;

CLOSE t_index;

END;

$$

call testEndHandle();

#SELECT region from comsumer10 where country='中国' GROUP BY region;

mysql 游标循环_mysql for循环遍历 游标用处相关推荐

  1. mysql存储过程游标嵌套_MYSQL存储过程中使用游标嵌套的实例

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. delimiter $$ drop procedure if exists findErr ...

  2. mysql游标遍历中sql语句出现异常_MySQL中的异常处理,游标

    一.异常处理的理解 ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY' 错误 4位error code(5位sql statis):错误 ...

  3. oracle中的cursor属性有哪些,Oracle学习11:游标(cursor)--显式游标隐式游标、游标四个属性、循环遍历...

    1.概述 上文PLSQL学习中提到的知识,可以发现,基本都可以通过Java等语言实现,而为了实现程序的可移植性,实际开发工作中我们也是如此做的. 那么PLSQL的重点是什么呢?接下来我们来介绍游标cu ...

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

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

  5. mysql游标事例_Mysql 游标示例

    CREATE  PROCEDURE `gk_test`() COMMENT '测试数据'  -- 函数注释 BEGIN DECLARE done INT DEFAULT FALSE; -- 定义遍历数 ...

  6. mysql 函数 局部变量_MySQL 存储过程 存储函数 局部变量 游标 概念示例

    一个存储过程是一个可编程的函数,它可以在MySQL中创建并保存.它是由一些SQL语句和一些特殊的控制结构语句组成. 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定的功能时,存储过程是一个非 ...

  7. mysql 游标大小_Mysql游标入门

    游标 MySQL检索操作返回一组称为结果集的行.这组返回的行都是与SQL语句相匹配的行(零行或多行).使用简单的SELECT语句,例如,没有办法得到第一行.下一行或前10行,也不存在每次一行地处理所有 ...

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

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

  9. mysql与oracle遍历游标

    MYSQL部分 CREATE DEFINER=`root`@`localhost` PROCEDURE `ProcedureTest`() BEGINDECLARE i int;-- 设置初始值,用于 ...

最新文章

  1. 苹果芯片工程师又被挖!这次是微软,要自研Azure服务器芯片
  2. python主要用于什么-python主要用于哪些方向
  3. 操作系统原理:全局页面置换算法、工作集页置换、常驻集页置换、抖动问题
  4. webconfig中注册HttpHandler报错:检测到在集成的托管管道模式下不适用的 ASP.NET 设置。...
  5. C#全能数据库操作类及调用示例
  6. 新的一年,如何高效学习前端前沿知识~
  7. CoreData 自定义数据类型
  8. thunderbrid设置中文
  9. python基于给定时间戳生成 未来/过去 前进/倒退 n个时刻的时间戳操作大全(包括秒、分钟、小时、天、星期、月、年)
  10. java 字符串数组排序_Java 使用泛型为不同类型数组排序
  11. 《企业IT架构转型之道》读书笔记
  12. USB2.0接口管脚定义
  13. 机器学习系列(11)_决策树挖掘NBA冠军球队数据
  14. 如何批量将 PPT 转换为 jpeg、png、bmp 图片
  15. TortoiseSVN右键没有菜单
  16. 基于Gensim创建词向量
  17. 外媒介绍全新表情密码 用emoji解锁安全吗?
  18. 解决U盘中文件全部变成快捷方式的问题
  19. 【ML】异常检测、PCA、混淆矩阵、调参综合实践(基于sklearn)
  20. MySQL insert ignore/ update ignore 不只用来忽略id重复

热门文章

  1. Windows Server 2008安装Memcached笔记
  2. C语言笔试题--从CSDN转发
  3. 【转载】Hadoop 2.7.3 和Hbase 1.2.4安装教程
  4. Visual Assist X 10.8.2036的Crack破解补丁.2014.05.22 (General release.)
  5. 我的node+express小例子
  6. 内核compiler.h的学习
  7. ASP.NET数据绑定技术
  8. 数据库行转列的sql语句
  9. eclipse安装ADT插件重启后不显示Android SDK Manager和Android Virtual Device Manager图标的一种解决办法
  10. linux conntrack命令 路由连接 跟踪表 显示删除监听记录