MySQL必知必会 学习笔记 第二十四章 使用游标
MySQL 5增加了对游标的支持。
游标是存储在MySQL服务器上的数据库查询,它不是SELECT语句,而是被该语句检索出来的结果集,存储了游标后,就能在检索出来的行中前进或后退一行或多行。
不同于多数DBMS,MySQL游标只能用于存储过程和函数。
使用游标步骤:
1.使用前必须先声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的SELECT语句。
2.声明后,必须打开游标以供使用。这个过程使用前面定义的SELECT语句把数据实际检索出来。
3.根据需要取出(检索)各行。
4.使用结束时,关闭游标。
声明游标后,可频繁地开关游标。游标打开后,可频繁地进行取操作。
创建游标:
CREATE PROCEDURE procedureName()
BEGIN
DECLARE cursorName CURSOR
FOR
SELECT语句
END;
存储过程处理完成后,游标就消失了。
打开游标:
OPEN cursorName;
在执行OPEN语句时执行查询,并存储检索出的数据以供浏览和滚动。
关闭游标:
CLOSE cursorName;
CLOSE语句释放游标使用的所有内部内存和资源。如果想再打开游标,再调用OPEN即可。
如果不明确关闭游标,到达END语句时会自动关闭它。
游标被打开后,可使用FETCH语句分别访问它检索出的每一行,它还会向前移动游标的内部行指针,使下一条FETCH语句检索下一行:
CREATE PROCEDURE procedureName()
BEGIN
DECLARE o INT;
DECLARE cursorName CURSOR
FOR
SELECT order_num FROM orders;
OPEN cursorName;
FETCH cursorName INTO o;
CLOSE cursorName;
END;
循环检索数据,从第一行到最后一行:
CREATE PROCEDURE procedureName()
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT;
DECLARE cursorName CURSOR
FOR
SELECT order_num FROM orders;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; -- SQLSTATE ‘02000’表示未找到,FETCH最后一条数据之后的数据时会出现
OPEN cursorName;
REPEAT
FETCH cursorName INTO o;
UNTIL done END REPEAT;
CLOSE cursorName;
END;
DECLARE定义的局部变量必须在游标或CONTINUE HANDLER之前定义,CONTINUE HANDLER必须在游标之后定义。
除了REPEAT,MySQL还支持循环语句,它会循环直到使用LEAVE语句手动退出。通常REPEAT语句的语法更适合对游标操作。
存储过程中可以创建表,也能调用另一个存储过程,如果调用另一个存储过程时需要参数,参数前不需要加@:
CREATE PROCEDURE procedureName1()
BEGIN
DECLARE o INT;
CALL procedureName2(o); -- 参数前不需要加@
END;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)