游标 Cursor

游标是用来存储查询的结果集的数据类型,也称为是光标

在存储过程和函数中可以使用光标对结果集进行循环的处理

光标的使用包括1、声明,2、开启,3、关闭,4、Fetch

游标仅用于存储函数和

语法 Syntax

创建游标

DECLARE 游标名 CURSOR FOR 查询SQL;

打开游标

OPEN 游标名;

关闭游标

CLOSE 游标名;

使用游标

FETCH 游标名 INTO 变量1,变量2,...;

看完介绍以后发现其实是一个迭代器

查询的结果也是一张表,游标就从0的位置起始,FETCH就是一行一行读取结果记录

演示案例:

DELIMITER $
CREATE PROCEDURE cursorForAdmin()
BEGIN
-- 创建写入的变量
DECLARE CID INT(11);
DECLARE CUSERNAME VARCHAR(24);
DECLARE CPASSWORD VARCHAR(24); -- 声明游标
DECLARE adminCursor CURSOR FOR SELECT * FROM admin; -- 开启游标
OPEN adminCursor; -- 使用游标读取一行记录赋值到上述的变量中
FETCH adminCursor INTO CID, CUSERNAME, CPASSWORD; SELECT CID, CUSERNAME, CPASSWORD; -- 关闭游标
CLOSE adminCursor;
END

调用:

CALL cursorForAdmin();

第二次调用时把游标的推进到下一个行记录,写入上述的变量中

变量被重新赋值,记录显示新的结果,

如果游标已经推进到最后一行记录时,继续向下执行,发现已经没有记录了

存储过程会报错:

NO Data ,zero Rows Fectched SELECTED, OR PROCESSED

循环获取游标实现:

遍历首先需要获取查询结果的总记录数

使用  COUNT(*)  来获取

DELIMITER $
CREATE PROCEDURE cursorForAdminByFor()
BEGIN
# 展示用的变量
DECLARE CID INT(11);
DECLARE CUSERNAME VARCHAR(24);
DECLARE CPASSWORD VARCHAR(24); # 结束循环变量
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT; # 游标变量
DECLARE adminCursor CURSOR FOR SELECT * FROM admin; # 打开游标
OPEN adminCursor; # 循环开始
REPEAT
FETCH NEXT FROM adminCursor INTO CID, CUSERNAME, CPASSWORD;
SELECT CID, CUSERNAME, CPASSWORD;
UNTIL done END REPEAT; # 关闭游标
CLOSE adminCursor;
END

调用:

CALL cursorForAdminByFor();

【DataBase】MySQL 31 游标的更多相关文章

  1. 一看便知linux下mysql报错ERROR 1044: Access denied for user: '@localhost' to database 'mysql'

    错误信息:ERROR 1044: Access denied for user: '@localhost' to database 'mysql' linux下解决方案: mysql> use ...

  2. ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'mysql'

    mysql> use mysqlERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'mysql' ...

  3. Mysql - 解决Access denied for user ''@'localhost' to database 'mysql'问题

    http://361324767.blog.163.com/blog/static/11490252520124454042468/ 首先我想说一句话: 我极度鄙视国内搞IT的人,简直无语,同样是解决 ...

  4. Database(Mysql)发版控制二

    author:skate time:2014/08/18 Database(Mysql)发版控制 The Liquibase Tool related Database 一.Installation ...

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

    原文:MySQL中游标使用以及读取文本数据 前言 之前一直没有接触数据库的学习,只是本科时候修了一本数据库基本知识的课.当时只对C++感兴趣,天真的认为其它的课都没有用,数据库也是半懂不懂,胡乱就考试 ...

  6. ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

    提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'.前两天也出现过这个问题,网上找了一个比 ...

  7. MySQL存储过程 游标

    MySQL存储过程  游标 如何在存储过程中使用MySQL游标来遍历SELECT语句返回的结果集 MySQL游标简介 要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理 ...

  8. MySQL:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

    ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'. 原因是:mysql数据库的user表里,存 ...

  9. unknow table alarmtemp error when drop database (mysql)

    Q: unknow table alarmtemp error when  drop database (mysql) D: alarmtemp is table in rtmd database. ...

  10. Access denied for user ''@'localhost' to database 'mysql'

    ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'   在centos下安装好了mysql,用r ...

随机推荐

  1. LTSC系统,唯一未被微软宣传过,却备受用户赞誉,CPU占用暴降

    微软拥有多款操作系统,如Windows XP.Windows 7.Windows 10以及最新的Windows 11等. 其中,Windows XP和Windows 7因其稳定性和用户友好性而广受好评 ...

  2. v-once指令 v-if和v-show

    v-once指令 只渲染元素和组件一次,之后元素和组件将失去响应式功能 v-if和v-show 根据表达式的布尔值(true/false)进行判断是否渲染该元素 注:v-if 有更高的切换开销,而 v ...

  3. .NET借助虚拟网卡实现一个简单异地组网工具

    由于工作需要,经常需要远程客户的服务器,但是并不是所有服务器都能开外网端口,使用向日葵等软件终究还是不太方便,于是找了很多工具,包括zerotier 等,但是由于服务器在国外等有时候还不同, 于是开始 ...

  4. The remote name could not be resolved

    HTTP The remote name could not be resolved HTTP Status:NameResolutionFailure

  5. 地铁查询app 结对作业三

    经过今天一下午的奋斗 安卓app 只剩下最难的部分了 最短路径问题 我们考虑用迪杰斯特拉算法 不过 没有做出来 还要继续去学习一下这个代码 并寻求网上代码的帮助

  6. unity持久化数据之XML和Excel

    unity持久化数据之XML public class XMLDataMananger: Singleton<XMLDataMananger> { protected XMLDataMan ...

  7. 用 Python 绘制现金流量图

    目录 用 Python 绘制现金流量图 Python 实现 实现原理 具体代码 使用示例 1:根据现金流量表绘制现金流量图 使用示例 2:绘制等额.等差.等比序列现金流量图 等额序列现金流量图 等差序 ...

  8. pytest_重写pytest_sessionfinish方法的执行顺序_结合报告生成到发送邮件

    背景: Python + pytest+pytest-testreport生成测试报告,到了生成报告之后,想要发送邮件,之前的方案是配合Jenkins,配置报告的路径进行发送 如果是平时的跑的项目,没 ...

  9. iOS11之后刷新tableview会出现漂移的现象解决办法

    首先要注意这只是在iOS11下会出现的bug,如果iOS10以及以下也有问题的情况不属于此列 问题的动图如下所示,如果要做每隔一段短时间就刷新一个section甚至整个tableview的操作的时候会 ...

  10. 忘记Linux密码这样破解

    忘记了Linux的密码该怎么办呢?有人想到重装系统.我想说除非你不想干了! 在这里使用CentOS7来教大家怎么 破解Linux的密码 (不能知道原来的密码,但是可以强行修改) 1.在grub引导界面 ...