mysql 游标循环_mysql for循环遍历 游标用处
以前一直不知道游标的作用,之前的结果集遍历 博主一直用的是记录查询出来的记录总数并一条条用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循环遍历 游标用处相关推荐
- mysql存储过程游标嵌套_MYSQL存储过程中使用游标嵌套的实例
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. delimiter $$ drop procedure if exists findErr ...
- mysql游标遍历中sql语句出现异常_MySQL中的异常处理,游标
一.异常处理的理解 ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY' 错误 4位error code(5位sql statis):错误 ...
- oracle中的cursor属性有哪些,Oracle学习11:游标(cursor)--显式游标隐式游标、游标四个属性、循环遍历...
1.概述 上文PLSQL学习中提到的知识,可以发现,基本都可以通过Java等语言实现,而为了实现程序的可移植性,实际开发工作中我们也是如此做的. 那么PLSQL的重点是什么呢?接下来我们来介绍游标cu ...
- mysql 为游标赋值_mysql 存储过程之游标
游标按我的理解就是用在sql编程中对查询结果集的解析,类比jdbc中的resultset对象.FETCH 一行游标指针就往下面移动一行,直到所有行被遍历完成. 游标的使用分为4步: 1.定义游标,指定 ...
- mysql游标事例_Mysql 游标示例
CREATE PROCEDURE `gk_test`() COMMENT '测试数据' -- 函数注释 BEGIN DECLARE done INT DEFAULT FALSE; -- 定义遍历数 ...
- mysql 函数 局部变量_MySQL 存储过程 存储函数 局部变量 游标 概念示例
一个存储过程是一个可编程的函数,它可以在MySQL中创建并保存.它是由一些SQL语句和一些特殊的控制结构语句组成. 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定的功能时,存储过程是一个非 ...
- mysql 游标大小_Mysql游标入门
游标 MySQL检索操作返回一组称为结果集的行.这组返回的行都是与SQL语句相匹配的行(零行或多行).使用简单的SELECT语句,例如,没有办法得到第一行.下一行或前10行,也不存在每次一行地处理所有 ...
- mysql游标进阶_MYSQL进阶学习知识拓展一:MySQL 存储过程之游标!
一.MySQL游标的概念 游标介绍: MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想, ...
- mysql与oracle遍历游标
MYSQL部分 CREATE DEFINER=`root`@`localhost` PROCEDURE `ProcedureTest`() BEGINDECLARE i int;-- 设置初始值,用于 ...
最新文章
- 苹果芯片工程师又被挖!这次是微软,要自研Azure服务器芯片
- python主要用于什么-python主要用于哪些方向
- 操作系统原理:全局页面置换算法、工作集页置换、常驻集页置换、抖动问题
- webconfig中注册HttpHandler报错:检测到在集成的托管管道模式下不适用的 ASP.NET 设置。...
- C#全能数据库操作类及调用示例
- 新的一年,如何高效学习前端前沿知识~
- CoreData 自定义数据类型
- thunderbrid设置中文
- python基于给定时间戳生成 未来/过去 前进/倒退 n个时刻的时间戳操作大全(包括秒、分钟、小时、天、星期、月、年)
- java 字符串数组排序_Java 使用泛型为不同类型数组排序
- 《企业IT架构转型之道》读书笔记
- USB2.0接口管脚定义
- 机器学习系列(11)_决策树挖掘NBA冠军球队数据
- 如何批量将 PPT 转换为 jpeg、png、bmp 图片
- TortoiseSVN右键没有菜单
- 基于Gensim创建词向量
- 外媒介绍全新表情密码 用emoji解锁安全吗?
- 解决U盘中文件全部变成快捷方式的问题
- 【ML】异常检测、PCA、混淆矩阵、调参综合实践(基于sklearn)
- MySQL insert ignore/ update ignore 不只用来忽略id重复
热门文章
- Windows Server 2008安装Memcached笔记
- C语言笔试题--从CSDN转发
- 【转载】Hadoop 2.7.3 和Hbase 1.2.4安装教程
- Visual Assist X 10.8.2036的Crack破解补丁.2014.05.22 (General release.)
- 我的node+express小例子
- 内核compiler.h的学习
- ASP.NET数据绑定技术
- 数据库行转列的sql语句
- eclipse安装ADT插件重启后不显示Android SDK Manager和Android Virtual Device Manager图标的一种解决办法
- linux conntrack命令 路由连接 跟踪表 显示删除监听记录