半岛bandao体育(中国)官方网站

BOB半岛官方:聊聊 MySQL 中的游标

日期:2024-08-15 17:20 / 作者:zoc7RcITctunhMtq7EzA
[[435403]]

聊聊 MySQL 中的游标

什么是游标?

游标(cursor)是一个存储在MySQL服务器上的数据库查询, 它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游 标之后,应用程序可以根据需要滚动或浏览其中的数据BOB半岛官方。BOB半岛新版

注意:MySQL游标只能用于 存储过程(和函数)。BOB半岛下载

创建游标

在创建一个游标前,我们需要先清除游标的语法

1、定义游标

DECLARE 游标名称 CURSOR FOR SQL语句; 

2、打开游标BOB半岛下载

OPEN 游标名称; 

3、获取结果

FETCH 游标名称 INTO 变量名称[,变量名称]; 

4、关闭游标BOB半岛入口

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(); 

得到结果:

聊聊 MySQL 中的游标

这里肯定有小伙伴好奇,customers表里明明有7条记录,为什么只显示了1条记录?

这是因为游标的变量只保留了customers表中的第一行数据,如果要查看后面的数据,就需要循环往下移动游标,才能继续查看。

示例二

定义一个存储过程,调用存储过程时,将表customers里的数据循环写入新的表里面。BOB半岛官方

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类似,都是用来循环执行循环体里面的内容,直到循环结束。

 BOB半岛娱乐

聊聊 MySQL 中的游标


BOB半岛下载