MySQL 游标

这篇博客介绍了MySQL中的游标,包括游标的概述、声明、打开、提取数据以及关闭等步骤。游标在MySQL的存储程序中用于只读、不可滚动地遍历数据,通过游标可以逐行提取并处理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游标概述:

MySQL支持在存储程序(存储过程存储函数)里定义(一个/多个)游标,游标具有以下属性:

  • 只读:不可更新
  • 不可滚动:只可以沿着一个方向遍历,不能跳过某些行。

 

## 关于游标申明、打开、使用、关闭的全过程实例
CREATE DATABASE test;
USE test;

CREATE TABLE t1(
id char(16),
data int
);

CREATE TABLE t2(
i int not null);

CREATE TABLE t1(
id char(16),
data int
);

CREATE PROCEDURE cur_demo()
BEGIN
    DECLARE done INT DEFAULT FALES;
    DECLARE a CHAR(16);
    DECLARE b, c INT;
    # 申明游标
    DECLARE cur1 CURSOR FOR SELECT id, data FROM test.t1;
    DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
    # 申明条件
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    # 打开游标
    OPEN cur1; 
    OPEN cur2;
    # 使用游标
    read_loop: LOOP
        FETCH cur1 INTO a, b;
        FETCH cur2 INTO c;
        IF done THEN 
            LEAVE read_loop;
        END IF;
        IF b>c THEN
            INSERT INTO test.t3 VALUES (a, b);
        ELSE 
            INSERT INTO test.t3 VALUES (a, c);
        END IF;
        END LOOP;
    # 关闭游标
    CLOSE cur1;
    CLOSE cur2;
END;      

 

游标申明:

DECLARE cursor_name CURSOR FOR select_statement

#使用上面的语句,可以申明一个游标,并且使用seclect_statement语句将查询到结果存入到游标中。
#seclect_statement 语句中查询的列数必须与FETCH语句中输出变量的数量一致。
#seclect_statement 语句中不能包含INTO...
#游标申明必须出现在句柄(handler)申明之前,条件(condition)和变量(variable)之后
#一个存储程序可以包含多个游标,但是每个游标在给定的区域中名字必须唯一

游标打开:

OPEN cursor_name
# 使用这条语句可以打开已经申明好的游标

提取游标内数据:

将游标中的数据提取出来,存入到给定的变量中

FETCH [[NEXT] FROM]cursor_name INTO  var_name1[, var_name2,... var_nameN
# 使用这条语句将已打开游标中的数据提到到给定的变量中,并将游标内指针往前移动
# 被检索的列数必须和申明时select语句中的列数一致

游标关闭:

CLOSE cursor_name
# 使用这条语句将之前打开的游标cursor_name 关闭
# 如果这个游标没有被打开,将会抛出一个错误
# 如果已打开的游标没有被显式的关闭,它将在定义其BEGIN....END 的语句块结束时被关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值