什么是游标?
游标(cursor)是一个存储在MySQL服务器上的数据库查询, 它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游 标之后,应用程序可以根据需要滚动或浏览其中的数据。
注意:MySQL游标只能用于 存储过程(和函数)。
创建游标
在创建一个游标前,我们需要先清除游标的语法
1、定义游标
DECLARE 游标名称 CURSOR FOR SQL语句;
2、打开游标
OPEN 游标名称;
3、获取结果
FETCH 游标名称 INTO 变量名称[,变量名称];
4、关闭游标
CLOSE 游标名称;
我们以Customers表来作为示例
示例一
定义一个存储过程,调用的时候执行里面的游标
-
CREATE PROCEDURE PROC1()
-
BEGIN
-
-- 定义两个存放结果的变量
-
DECLARE NAME VARCHAR(20);
-
DECLARE ADDR VARCHAR(50);
-
-- 声明游标
-
DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers;
-
-- 打开游标
-
OPEN MY;
-
-- 获取结果
-
FETCH MY INTO NAME,ADDR;
-
-- 这里是为了显示获取结果
-
SELECT NAME,ADDR;
-
-- 关闭游标
-
CLOSE MY;
-
END;
我们执行完上面的存储过程后,就可以调用该存储过程了
CALL PROC1();
得到结果:
这里肯定有小伙伴好奇,customers表里明明有7条记录,为什么只显示了1条记录?
这是因为游标的变量只保留了customers表中的第一行数据,如果要查看后面的数据,就需要循环往下移动游标,才能继续查看。
示例二
定义一个存储过程,调用存储过程时,将表customers里的数据循环写入新的表里面。
-
CREATE PROCEDURE PROC2()
-
BEGIN
-
-- 定义两个存放结果的变量
-
DECLARE FLAG INT DEFAULT 0;
-
DECLARE NAME VARCHAR(20);
-
DECLARE ADDR VARCHAR(50);
-
-- 声明游标
-
DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers;
-
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FLAG=1;
-
-- 打开游标
-
OPEN MY;
-
-- 循环体部分
-
L1:LOOP
-
-- 获取结果
-
FETCH MY INTO NAME,ADDR;
-
IF FLAG=1 THEN
-
LEAVE L1;
-
END IF;
-
-- 这里是为了显示获取结果
-
INSERT INTO cus VALUES(NAME,ADDR);
-
-- 关闭游标
-
END LOOP; -- 结束循环
-
CLOSE MY;
-
END;
然后我们执行这个存储过程,并查询cus表里的数据
-
CALL PROC2();
-
SELECT * FROM cus;
结果:
结果与customers里的一致,但是这些结果是循环一条一条往下移动的过程中插入的,即这个循环执行了7次。
以上就是游标的基本操作原理了,此外游标的循环体还有WHILE,REPEAT等操作方式,他们的操作方式与LOOP类似,都是用来循环执行循环体里面的内容,直到循环结束。
以上就是MySQL游标的相关内容,觉得不错记得帮忙转发+在看~
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。