什么是游标?
游标(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游标的相关内容,觉得不错记得帮忙转发+在看~
行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!