1、游标的作用:
1.1 如果你前面看过mysql函数,会发现无法使用返回多行结果的语句。但如果你又确实想要使用时,就需要使用到游标,游标可以帮你选择出某个结果(这样就可以做到返回单个结果)。
1.2 使用游标也可以轻易的取出在检索出来的行中前进或后退一行或多行的结果。
1.3 游标可以遍历返回的多行结果。
1.4 Mysql中游标只适用于存储过程以及函数。

2、游标的定义与语法:

1.定义游标:declare 游标名 cursor for select语句;
2.打开游标:open 游标名;
获取结果:fetch 游标名 into 变量名[,变量名];
关闭游标:close 游标名;
--在windows系统中写存储过程时,如果需要使用declare声明变量,需要添加这个关键字,否则会报错。
delimiter //
drop procedure if exists StatisticStore;
CREATE PROCEDURE StatisticStore()
BEGIN--创建接收游标数据的变量declare c int;declare n varchar(20);--创建总数变量declare total int default 0;--创建结束标志变量declare done int default false;--创建游标declare cur cursor for select name,count from store where name = 'iphone';--指定游标循环结束时的返回值declare continue HANDLER for not found set done = true;--设置初始值set total = 0;--打开游标open cur;--开始循环游标里的数据read_loop:loop--根据游标当前指向的一条数据fetch cur into n,c;--判断游标的循环是否结束if done thenleave read_loop; --跳出游标循环end if;--获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,set total = total + c;--结束游标循环end loop;--关闭游标close cur;--输出结果select total;
END;
--调用存储过程
call StatisticStore();

fetch是获取游标当前指向的数据行,并将指针指向下一行,当游标已经指向最后一行时继续执行会造成游标溢出,可以定义一个变量来控制越界。如:
declare continue handler
实例:

declare continue handler for NOT FOUND statement;

游标循环实例:

首先应该创建游标,然后打开游标后,应先手动进行fetch操作获取到一行数据,然后再通过循环,在循环里先做处理内容,后进行fetch操作。这样如果在手动获取数据的期间就没有获得到数据的话,就会执行have = 0,如果是repeat循环,然后进入repeat循环,先输出null数据,最后又进行获取,这样运行到until时就会退出循环;如果是while循环,压根就不进去while循环里,就不会有任何1行输出。

repeat循环:

create procedure p17()
begindeclare row_gid int;declare row_name varchar(20);declare row_num int;declare have int default 1;declare getgoods cursor for select gid,name,num from goods where 0;declare continue handler for NOT FOUND set have:= 0;open getgoods;fetch getgoods into row_gid,row_name,row_num;repeat select row_name,row_num;fetch getgoods into row_gid,row_name,row_num;until have = 0 end repeat;close getgoods;
end$

while循环:

create procedure p18()
begindeclare row_gid int;declare row_name varchar(20);declare row_num int;declare have int default 1;declare getgoods cursor for select gid,name,num from goods where 0;declare continue handler for NOT FOUND set have:= 0;open getgoods;fetch getgoods into row_gid,row_name,row_num;while have = 1 do select row_name,row_num;fetch getgoods into row_gid,row_name,row_num;end while;close getgoods;
end$

更多解释请看:https://www.jb51.net/article/164679.htm
本章是本人在使用游标,学了多个博客整理出来的

Mysql游标的定义与使用相关推荐

  1. mysql游标修改数据库,数据库游标之mysql游标的定义和使用

    游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制,游标充当指针的作用, 尽管游标能遍历结果中的所有行,但一次只指向一行,游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行 ...

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

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

  3. mysql 游标循环_mysql for循环遍历 游标用处

    以前一直不知道游标的作用,之前的结果集遍历 博主一直用的是记录查询出来的记录总数并一条条用LIMIT 1 OFFSET index 进行查找,并进行处理的. 现在终于会使用游标了,献上一个小例子供大家 ...

  4. mysql游标进阶_mysql进阶(三)游标简易教程

    mysql游标简易教程 从mysql V5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎.InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键 ...

  5. 什么是mysql的游标_MySQL游标概念是什么 MySQL游标概念与用法介绍

    本篇文章小编给大家分享一下MySQL游标概念与用法介绍,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接 ...

  6. django mysql 游标,MySQL Cursor 存储过程之游标与相关循环

    简单介绍游标 在检索出来的行中,前进或者后退一行或多行,就需要用到所谓的"游标". 游标不是某个SELECT语句,但是它是被该语句检索出来的结果集. 几个特点: ·MySQL游标只 ...

  7. mysql游标的用法及作用_Mysql 游标的用法及其作用

    mysql 游标的用法和作用,话不多说,这个是网上看到的例子,简答粗暴. 例子: 当前有三张表a.b.c其中a和b是一对多关系,b和c是一对多关系,现在需要将b中a表的主键存到c中: 常规思路就是将b ...

  8. mysql 游标 navigate_MySQL游标的概念介绍和游标的使用讲解

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

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

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

最新文章

  1. 确定修改——取消修改
  2. python 帮助文档、自我解释
  3. 研究生如何走出“迷茫”?
  4. %matplotlib inline是jupyter notebook里的命令, 意思是将那些用matplotlib绘制的图显示在页面里而不是弹出一个窗口
  5. win7虚拟机黑苹果_关于最近折腾黑苹果的一些心得分享
  6. 从网上找到一个清晰CSS视频教程和大家分享一下
  7. 11-swift中的函数
  8. php系统维护,软件系统维护主要包含什么
  9. 第512章 河系量子计算机,第512章、河系量子计算机
  10. Linux Kernel中irq handler, softirq handler 和 tasklet
  11. u深度重装系统详细教程_u深度重置用户密码操作步骤
  12. Qt制作局域网即时通讯软件
  13. 哪个手机浏览器可以倍速_手机四款浏览器APP的比较
  14. [备忘]Oracle数据库字段缺省值函数-ID值自动填充
  15. windows无法连接到某个wifi_电脑提示Windows无法连接到这个网络/无线网络的解决方法...
  16. NVIDIA RTX A6000深度学习训练基准
  17. C#与三菱PLC以太网通讯程序上位机源码 通过3E帧SLMP /MC协议与三菱FX5U/Q系列PLC通讯
  18. oracle客户端12560,windows下 sqlplus / as sysdba 报ora-12560的终极解决方法
  19. python基础:web =html+ python
  20. python 小学数学,一个小学的数学题

热门文章

  1. 【java】【geoserver】java实现对geoserver图层及数据库的数据增删改
  2. 集合论——集合表示方法,关系及特殊集合
  3. python 贴吧盖楼_「今天,只想讲一个跨年爱情故事。
  4. `英语` 2022/8/20
  5. 如何获取JS对象的第一个属性的键或值
  6. [译] 理解Horizon的连接
  7. IBM朱近之:十大误区蒙蔽了云计算
  8. phpcms模板缓存
  9. 有没有治疗幽门螺旋杆菌的特效药?
  10. android NavigationView解析