MySQL的游标CURSOR
1 什么是游标CURSOR
CURSOR 是在存储过程中,根据需要对数据集合进行前后浏览的一种应用。
CURSOR 程序间用来做数据交换的一个桥梁,比如在用 Python进行数据分析时,SQL传递给 Python数据就是通过 CURSOR实现。
在有 GUI或者 APP的情况下,肉眼即可见到数据,因此很少会用到 CURSOR。
但是在使用 PANDAS等程序批量处理的时候,CURSOR很重要。
2 游标的使用
2.1 创建游标
CREATE PROCEDURE processorders()
BEGIN
DECLARE ordernumbers CURSOR # 声明游标 DECLARE .. CURSOR FOR ..
FOR
select order_num from orders ;
open ordernumbers ; # 打开游标
close ordernumbers ; # 关闭游标
END ;
2.2 使用数据
CREATE PROCEDURE processorders2()
BEGIN
# -------------------------------------------------------------------
DECLARE o int; # 定义运输 CURSOR内容的容器
DECLARE done boolean DEFAULT 0; # 定义一个小旗子,作为开始、结束的信号
DECLARE ordernumbers CURSOR
FOR
select order_num from orders; # 定义游标
DECLARE CONTINUE HANDLER FOR sqlstate '02000' SET done = 1; # 定义当循环完所有结果时,举起小旗子
# -------------------------------------------------------------------
OPEN ordernumbers; # 打开游标
REPEAT # 循环开始
FETCH ordernumbers INTO o;
SELECT o; # 正常情况下不会用到 SELECT,而一般搭配 Python或其他处理命令使用
UNTIL done END REPEAT; # 循环结束(和 Python中的 "for i in CURSOR" 本质是一样的)
CLOSE ordernumbers; # 关闭游标
# -------------------------------------------------------------------
END;
CALL processorders2()
CURSOR就像是一个满载的弹夹,而 o就像是一发发的子弹,而 REPEAT是撞针