游标 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. nodejs加jq来实现下载word文档

    先看效果 浏览器上: 下载的效果: 第一步是自己先搭建前端页面把自己写的结构数据全部传到后端 下面就是整个的结构 结构分析后端拿到数据后端解析: 第一层菜单层: { role: '分析报告', //顶 ...

  2. react 网络请求 axios

    react中通过npm来安装axios扩展 cnpm i -S axios 发起请求 import React, { Component } from 'react' import axios fro ...

  3. Kali Linux 终端字体配色

    在用root用户登录Kali Liunx时,会发现终端的字体无配色,非常难看,以下这幅图便是kali用户和root用户的区别,看着真难受. echo $PS1,这便是区别所在. 那我们怎么让root用 ...

  4. Math Record

    T1.P3327 知识点:莫比乌斯反演,数论分块 我们知道 \(d(ij) = \sum_{x | i}\sum_{y | j}[\gcd(x,y) == 1]\). 所以我们就要求 \(\sum^n ...

  5. java rabbitmq模拟生产者,消费者demo

    1.exchange类型,rabbitmq交换机类型 exchange类型fanout 扇形交换机,它会把所有发送到该交换机的消息路由到所有与该交换机绑定的队列中.direct 直连交换机,它会把消息 ...

  6. Json字符串转换处理html编码格式,= \u003d 处理

    Json字符串转换处理html编码格式,=  \u003d 处理 import com.alibaba.fastjson.annotation.JSONField; import com.faster ...

  7. Nginx SSL证书更新及密码套件更新

    一.域名更换证书 ssl证书一般包括证书文件crt.cer.pem.pfx和私钥文件key. CER.CRT.PEM 和 PFX 是不同的证书文件格式,它们之间存在一些区别: CER (DER 编码) ...

  8. MySQL日志(redo log、binlog)刷盘策略

    通过上篇文章,我们知道MySQL是采用两段提交策略来保证事务的原子性的,redo log刷盘的时机是在事务提交的commit阶段采取刷盘的,在此之前,redo log都存在于redo log buff ...

  9. .NET6 个人博客-推荐文章加载优化

    个人博客-推荐文章加载优化 前言 随着博客文章越来越多,那么推荐的文章也是越来越多,之前推荐文章是只推荐8篇,但是我感觉有点少,然后也是决定加一个加载按钮,也是类似与分页的效果,点击按钮可以继续加载8 ...

  10. 高通mm-camera平台 Camera bring up基本调试思路

    原文:https://www.cnblogs.com/thjfk/p/4086001.html 确定硬件 1.首先对照原理图,检查camera module的pin脚连接是否正确. 2.用示波器量Ca ...