MYSQL入门学习之十四:游标的基本操作

        游标(CURSOR)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。
        游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。
        使用游标需要MySQL5及以上版本支持。
一、使用游标的步骤
        在能够使用游标前,必须声明(定义)它。
        一旦声明后,必须打开游标以供使用。
        对于填有数据的游标,根据需要取出(检索)各行。
        在结束游标使用时,必须关闭游标。
二、游标的基本操作
1、创建游标
        DECLARE cur_name CURSOR FOR SELECT ****;
        示例:
        mysql> delimiter //
        mysql> create procedure test_cur()
            -> begin
            ->     declare mycur cursor
            ->     for
            ->     select userid,username from newname;
            -> end;
            -> //
        mysql> delimiter ;

2、打开游标
        OPEN cur_name;
        MySQL在处理OPEN语句时执行查询,存储检索出的数据以供浏览和滚动。
3、关闭游标
        CLOSE cur_name;
        CLOSE语句释放游标使用的所有内部内存和资源。
        在一个游标关闭后,如果没有重新打开,则不能使用它。但是,使用声明过的游标不需要再次声明。
        如果不明确关闭游标,MySQL将会在到达END语句时自动关闭它。
        示例:
        mysql> delimiter //
        mysql> create procedure test_cur()
            -> begin
            ->     declare mycur cursor
            ->     for
            ->     select userid,username from newname;
            ->     open mycur;
            ->     close mycur;
            -> end;
            -> //
        mysql> delimiter ;

4、使用游标数据
        游标被打开后,可以使用FETCH语句分别访问它的每一行。
        示例:
        mysql> delimiter //
        mysql> create procedure test_cur()
            -> begin
            ->     declare done boolean default 0;
            ->     declare cur_userid int;
            ->     declare cur_birthday varchar(50);
            ->
            ->     declare mycur cursor
            ->     for
            ->     select userid,year(birthday) from newname where birthday is not null;
            ->     declare continue handler for sqlstate '02000' set done=1;
            ->
            ->     open mycur;
            ->
            ->     repeat
            ->         fetch mycur into cur_userid,cur_birthday;
            ->         select cur_userid,cur_birthday;
            ->     until done end repeat;
            ->
            ->     close mycur;
            -> end;
            -> //
        mysql> delimiter ;
        mysql> call test_cur;
        +------------+--------------+
        | cur_userid | cur_birthday |
        +------------+--------------+
        |         19 | 1988         |
        +------------+--------------+
        1 row in set (0.00 sec)
        
        +------------+--------------+
        | cur_userid | cur_birthday |
        +------------+--------------+
        |         42 | 2008         |
        +------------+--------------+
        1 row in set (0.01 sec)
       
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值