【DataBase】MySQL 31 游标
游标 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 游标的更多相关文章
- 一看便知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 ...
- 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' ...
- Mysql - 解决Access denied for user ''@'localhost' to database 'mysql'问题
http://361324767.blog.163.com/blog/static/11490252520124454042468/ 首先我想说一句话: 我极度鄙视国内搞IT的人,简直无语,同样是解决 ...
- Database(Mysql)发版控制二
author:skate time:2014/08/18 Database(Mysql)发版控制 The Liquibase Tool related Database 一.Installation ...
- MySQL中游标使用以及读取文本数据
原文:MySQL中游标使用以及读取文本数据 前言 之前一直没有接触数据库的学习,只是本科时候修了一本数据库基本知识的课.当时只对C++感兴趣,天真的认为其它的课都没有用,数据库也是半懂不懂,胡乱就考试 ...
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'.前两天也出现过这个问题,网上找了一个比 ...
- MySQL存储过程 游标
MySQL存储过程 游标 如何在存储过程中使用MySQL游标来遍历SELECT语句返回的结果集 MySQL游标简介 要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理 ...
- 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表里,存 ...
- unknow table alarmtemp error when drop database (mysql)
Q: unknow table alarmtemp error when drop database (mysql) D: alarmtemp is table in rtmd database. ...
- Access denied for user ''@'localhost' to database 'mysql'
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql' 在centos下安装好了mysql,用r ...
随机推荐
- react路由渲染
三种渲染方式 component = (组件对象或函数) <Route path="/home" component={Home} /> 或 <Route pat ...
- webpack配置css预处理
webpack默认只支持js的打包,不支持其它类型,为了让它支持样式的打包就需要加载一些loader 打包css文件 在webpack中配置对应的loader 在入口js文件中通过import导入样式 ...
- jquery checkbox的全选和反选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- sqlite3自动插入创建时间和更新时间
最近在记录一些简单的结构化日志信息时,用到了sqlite3数据库(保存的信息比较简单,用Mysql,SQL Server,Postgres这些数据库有点小题大做). 以前开发系统时,用Mysql和Po ...
- 物理机安装Centos系统
引言 在工作中,经常会在本地搭建开发环境,而使用的基本都是Linux系统,本文就教大家如何安装一套Centos Linux系统 准备 1.系统选择 系统:Centos 版本:7.9 2.镜像下载 下载 ...
- CloseableHttpClient设置超时时间demo 未设置默认是2分钟
# CloseableHttpClient设置超时时间demo 未设置默认是2分钟 import org.apache.http.HttpHeaders; import org.apache.http ...
- 用CSS3绘制iPhone手机
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 用CSS3绘制iPhone手机 日期:2017-7-3 阿 ...
- java的ConCurrentHashMap
一般的应用的编程,用到ConCurrentHashMap的机会很少,就象大家调侃的一样:只有面试的时候才用得着. 但还是有. 网上关于这个的资料,多如牛毛,大部分是原理分析和简单例子. 原理的核心就一 ...
- 『vulnhub系列』HMS-1
『vulnhub系列』HMS?-1 下载地址: https://www.vulnhub.com/entry/hms-1,728/ 信息搜集: 使用nmap进行存活主机探测,发现开启了21端口(ftp) ...
- 攻防世界——CRYPTO新手练习区解题总结<3>(9-12题)
第九题easychallenge: 下载附件,得到一个后缀为pyc的文件,上网百度一下pyc文件,得知 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变 ...