• 技术文章 >数据库 >mysql教程

    MySQL中什么是游标?如何使用游标?

    青灯夜游青灯夜游2021-09-08 19:13:13转载164
    什么是游标?如何使用游标?下面本篇文章就来带大家了解一下MySQL中的游标,介绍一下使用游标的步骤,希望对大家有所帮助!

    要明白什么是游标,首先要了解存储过程,存储过程是事先经过编译并且存储在数据库中的一段SQL语句,他可以接受参数,也可以在其中使用IF语句、设置变量、循环等,比如下面语句用于创建一个存储过程。【相关推荐:mysql视频教程

    delimiter $$
    create procedure select_all() begin select * from user; end;$$

    调用存储过程。

    mysql>  call select_all;$$

    存储过程可以减少数据库和应用服务器之间的传输,对提供数据库处理效率还是有好处的,而游标(Cursor)有的地方又叫光标,可以在存储过程中,对结果集进行循环处理,但是目前,MySQL只允许我们从SELECT语句从头到尾获取结果集中的每一行,无法从最后一行获取到第一行,也无法直接跳转到结果集中的指定行。

    使用游标有以下几个步骤

    1、游标定义

    DECLARE cursor_name CURSOR FOR select_statement

    2、打开游标

    OPEN cursor_name;

    3、获取游标中的数据

    FETCH cursor_name INTO var_name [, var_name]...

    4、关闭光标

    CLOSE cursor_name;

    5、释放光标

    DEALLOCATE cursor_name;

    实例

    创建表

    CREATE TABLE cursor_table
    (id INT ,name VARCHAR(10),age INT
    )ENGINE=innoDB DEFAULT CHARSET=utf8;
    insert into cursor_table values(1, '张三', 500);
    insert into cursor_table values(2, '李四', 200);
    insert into cursor_table values(3, '王五', 100);
    insert into cursor_table values(4, '老六', 20);
    
    
    create table cursor_table_user(name varchar(10));

    下面我们通过游标,遍历cursor_table表,把年龄大于30的人名存放到cursor_table_user

    drop procedure getTotal;
    delete from cursor_table_user ;
    
    CREATE  PROCEDURE getTotal()
    BEGIN  
       DECLARE total INT; 
       DECLARE sid INT;  
       DECLARE sname VARCHAR(10);  
       DECLARE sage INT;  
       DECLARE done INT DEFAULT false;  
       DECLARE cur CURSOR FOR SELECT id,name,age from cursor_table where age>30;  
       DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;   
       SET total = 0;  
       OPEN cur;  
       FETCH cur INTO sid, sname, sage;  
       WHILE(NOT done) 
       DO  
           insert cursor_table_user values(sname);
           SET total = total + 1;  
           FETCH cur INTO sid, sname, sage;  
           
       END WHILE;  
       CLOSE cur;  
       SELECT total;  
    END
    call getTotal();
    
    mysql> select * from cursor_table_user;
    +--------+
    | name   |
    +--------+
    | 张三   |
    | 李四   |
    | 王五   |
    +--------+
    3 rows in set (0.00 sec)

    这段程序有一行非常重要,DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true; ,他表示如果游标或SELECT语句没有数据的时候,将done变量的值设置 为 true,用来退出循环。

    下面就是通过WHILE来依次遍历。

    原文地址:https://juejin.cn/post/7003237966952792077

    更多编程相关知识,请访问:编程视频!!

    以上就是MySQL中什么是游标?如何使用游标?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    专题推荐:MySQL 游标
    上一篇:MySQL中怎么进行sql_mode查询与设置 下一篇:MySQL中怎么启用并分析慢查询日志?
    线上培训班

    相关文章推荐

    • 解析mysql的安装与使用(收藏)• php mysql怎么实现修改记录• 详解MySQL中的count()、union()和group by语句• php7怎么安装mysqli扩展• 浅谈Mysql5.7中怎么搭建主从复制?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网