当前位置: 首页 > article >正文

MySQL中使用游标

目录

1、游标 -- CURSOR

2、使用游标

(1)在存储过程中创建游标

(2)打开游标

(3)使用游标

(4)关闭游标 

3、小结


博主用的是mysql8 DBMS,附上示例资料:

百度网盘链接: https://pan.baidu.com/s/1XaWi3Y7hpXbs_uHq2cPI6Q

提取码: fpnx

1、游标 -- CURSOR

SQL 检索操作返回一组称为结果集的行,这组返回的行都是与 SQL 语句相匹配的行(零行或多行)。

结果集(result set):SQL 查询所检索出的结果。

有时,需要在检索出来的行中前进或后退一行或多行,这就是游标的用途所在。游标(cursor)是一个存储在 DBMS 服务器上的数据库查询,它不是一条 SELECT 语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

MySQL 5 以上支持在存储过程中使用CURSOR

2、使用游标

使用游标涉及几个明确的步骤。

  • 在使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的 SELECT 语句和游标选项。
  • 一旦声明,就必须打开游标以供使用。这个过程用前面定义的 SELECT语句把数据实际检索出来。
  • 对于填有数据的游标,根据需要取出(检索)各行
  • 在结束游标使用时,必须关闭游标,可能的话,释放游标(有赖于具体的 DBMS)。
  • 声明游标后,可根据需要频繁地打开和关闭游标。在游标打开时,可根据需要频繁地执行取操作。

(1)在存储过程中创建游标

DECLARE 命名游标,并定义相应的 SELECT 语句,根据需要带 WHERE 和其他子句。为了说明,我们创建一个游标来检索没有电子邮件地址的所有顾客,作为应用程序的组成部分,帮助操作人员找出空缺的电子邮件地址。

    DECLARE CustCursor CURSOR 
    FOR 
    SELECT cust_email -- 这里只选择你需要的列,避免使用SELECT *
    FROM Customers 
    WHERE cust_email IS NOT NULL;

 定义游标之后,就可以打开它了

(2)打开游标

使用 OPEN CURSOR 语句打开游标,这条语句很简单,在大多数 DBMS中的语法相同:

		-- 打开游标
    OPEN CustCursor;

 处理 OPEN CURSOR 语句时,执行查询,存储检索出的数据以供浏览和滚动。

(3)使用游标

现在可以用 FETCH 语句访问游标数据了。FETCH 指出要检索哪些行,从何处检索它们以及将它们放于何处(如变量名)。从游标中检索一行(第一行):

FETCH CustCursor INTO email;
-- 在这里可以进行相应的处理,例如打印或者存储到其他表中
SELECT email; -- 输出处理后的数据

 在这个例子中,FETCH 用来检索当前行(自动从第一行开始),放到声明的变量 email 中。对于检索出来的数据进行查询操作。(检索后再使用 FETCH 就跳到下一行了)

以下是完整的存储过程代码:

DELIMITER //

CREATE PROCEDURE UseCursor()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE email VARCHAR(255); -- 假设你要获取的变量类型是VARCHAR,根据实际表结构调整
		
    DECLARE CustCursor CURSOR 
    FOR 
    SELECT cust_email -- 这里只选择你需要的列,避免使用SELECT *
    FROM Customers 
    WHERE cust_email IS NOT NULL;
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
		-- 打开游标
    OPEN CustCursor;

    read_loop: LOOP
		-- FETCH 语句检索一行并保存值到这些变量中
        FETCH CustCursor INTO email;
				
        IF done THEN
            LEAVE read_loop;
        END IF;
        
        -- 在这里可以进行相应的处理,例如打印或者存储到其他表中
        SELECT email; -- 输出处理后的数据
    END LOOP;

    -- 关闭游标
    CLOSE CustCursor;
END //

DELIMITER ;

CALL UseCursor();

(4)关闭游标 

    -- 关闭游标
    CLOSE CustCursor;

CLOSE 语句用来关闭游标。一旦游标关闭,如果不再次打开,将不能使用。第二次使用它时不需要再声明,只需用 OPEN 打开它即可。 

3、小结

  1. 游标是由SELECT语句查询出的结果集,声明时不会执行查询,一旦打开游标就会进查询返回数据
  2. 使用游标的作用是能够让应用程序根据需要滚动或浏览其中的数据
  3. MySQL 5 以上支持在存储过程中使用游标
  4. 使用游标的步骤:

声明游标 DECLARE CURSOR cursor_name FOR SELECT ...

打开游标 OPEN cursor_name

--根据需要对数据进行相应处理,可利用FETCH cursor_name INTO var_name将值保存在变量中

关闭游标 CLOSE cursor_name


http://www.kler.cn/a/515165.html

相关文章:

  • 重生之我在异世界学编程之C语言:深入指针篇(上)
  • Fastapi + vue3 自动化测试平台(4)-- fastapi分页查询封装
  • MyBatis最佳实践:提升数据库交互效率的秘密武器
  • 高并发内存池_CentralCache(中心缓存)和PageCache(页缓存)申请内存的设计
  • Golang Gin系列-5:数据模型和数据库
  • Linux(Centos 7.6)命令详解:dos2unix
  • C# ASP.NET MVC项目内使用ApiController
  • JAVAweb学习日记(六) 请求响应
  • 【华为OD机试】真题E卷-招聘(Java)
  • Appium 检查安装的插件
  • SQL-leetcode—1158. 市场分析 I
  • 谈谈RTMP|RTSP播放器视频view垂直|水平反转和旋转设计
  • 图论 八字码
  • 【Uniapp-Vue3】request各种不同类型的参数详解
  • 0基础跟德姆(dom)一起学AI 自然语言处理20-模型构建
  • 数据结构——算法基础
  • 13 网络编程
  • DRG_DIP 2.0时代医院程序结构转型与数据结构优化研究
  • kotlin的协程的基础概念
  • Shellcode
  • 计算机毕业设计hadoop+spark视频推荐系统 短视频推荐系统 视频流量预测系统 短视频爬虫 视频数据分析 视频可视化 视频大数据 大数据
  • 人脸识别打卡系统--基于QT(附源码)
  • Django学习笔记(bootstrap的运用)-04
  • 【优选算法】5----有效三角形个数
  • python创建一个httpServer网页上传文件到httpServer
  • LightGBM算法