【详细】MySQL之游标

    技术2026-03-11  7

    一、概述

    游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。 游标充当指针的作用,能遍历结果中的所有行,但他一次只指向一行。类似迭代器 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。 游标多是用在存储过程、触发器以及函数中来处理一些业务

    二、优缺点

    优点

    游标对从数据库中 select 查询得到的结果集的每一行(不可以跳过任何一行数据)可以进行不同的操作,是一种分离的思想。

    缺点

    只能一行一行操作,性能不高 使用游标可能会产生死锁,造成内存开销大

    三、基本语法

    1、声明
    DECLARE 游标名称 CURSOR FOR 查询语法
    2、打开游标
    OPEN 游标名称
    3、取游标中的数据
    FETCH 游标名称 INFO var_name [,var_name ]..... # 读取下一行(如果有下一行的话),并且前进游标指针。
    4、关闭游标
    CLOSE 游标名称;
    5、删除游标
    drop cursor 游标名称

    四、应用示例

    -- 使用游标创建一个存储过程,统计年龄大于19的记录的数量 delimiter // create procedure p2() begin -- 创建 用于接收游标值的变量 declare id,age,total int; -- 注意 接收游标值为中文时 需要 给变量 指定 字符集为utf8 declare name,sex varchar(20) character set utf8; -- 游标结束的标志 declare done int default 0; -- 声明游标 declare cur cursor for select stuId,stuName,stuSex,stuAge from student where stuAge > 19; -- 指定游标循环结束时的返回值 declare continue handler for not found set done =1; -- 打开游标 open cur; -- 初始化 变量 set total = 0; -- loop 循环 xxx:loop -- 根据游标当前指向的一条数据 fetch cur into id,name,sex,age; -- 当 游标的返回值为 1 时 退出 loop循环 if done = 1 then leave xxx; end if; set total = total + 1; -- 累计 end loop; close cur; -- 关闭游标 select total; -- 输出 累计的结果 end // delimiter ;
    Processed: 0.011, SQL: 9