您现在的位置是:群英 > 数据库 > MySQL数据库
MySQL中游标怎样理解?如何使用?
Admin发表于 2021-11-15 17:03:25778 次浏览

    这篇文章我们来了解MySQL中的游标,什么是游标?如何使用游标?下文对游标以及游标的使用有很详细的介绍,对大家学习和理解MySQL中的游标都有一定的帮助,接下来就跟随小编来了解看看吧!

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

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来依次遍历。

    现在大家对于MySQL中游标的作用和用法应该都有所了解了,上述示例有一定的参加价值,需要的朋友可以了解看看,希望大家阅读完这篇文章能有所收获。最后,想要了解更多MySQL游标的内容,大家可以关注群英网络其它相关文章。

文本转载自PHP中文网

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: mysql游标
相关信息推荐
2022-08-03 17:54:18 
摘要:本篇文章给大家带来了关于Oracle的相关知识,其中主要整理了体系结构的相关问题,Oracle的体系结构大体上分为两部分:Instance(实例)和Database(数据库),下面一起来看一下,希望对大家有帮助。
2022-08-15 17:34:58 
摘要:在oracle中,可以利用DROP语句删除指定的用户及其所有对象,该语句用于撤销索引、表和数据库操作,当与CASCADE配合使用是就可以删除用户对象,语法为“DROP USER 用户名 CASCADE”。
2022-08-09 17:55:19 
摘要:在oracle中,可以使用“create user”命令来增加用户,该命令的作用就是创建新的用户,语法为“create user 用户名 identified by 口令[即密码];”。
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部