29.MySQL之游标

如果想看更多有关于MySQL数据库的文章,请跳转到MySQL自学目录

本节讲述游标的基本概念和用法

游标

  游标本质上是一种能从select结果集中每次提取一条记录的机制。游标的作用就是用于对查询数据库所返回的记录进行遍历(一次只能指向一行),以便进行相应的操作。

游标的使用

  游标的使用分为四个步骤:

  • 声明游标。语法格式:declare 游标名 cursor for select语句;
  • 打开游标。语法格式:open 游标名;
  • 从游标中提取数据。语法格式:fetch 游标名 into 变量名1,变量名2…;
  • 关闭游标。语法格式:close 游标名;

注意:从游标名中提取数据时,变量名的个数必须与声明游标时使用的select语句中结果集的字段个数保持一致。故在之前就应该定义好变量。
举个栗子,大家好好理解一下。

mysql> # 使用游标
mysql> # 在goods表中水果小于10斤的就进货10斤,大于10斤就进货5斤
mysql> delimiter $
mysql> select * from goods$
+--------+------+------+
| name   | id   | num  |
+--------+------+------+
| 苹果   |    1 |    9 |
| 香蕉   |    2 |    5 |
| 西瓜   |    3 |   15 |
+--------+------+------+
3 rows in set (0.00 sec)

mysql> create procedure jinhuo2 ()
    -> modifies sql data
    -> begin
    -> declare anum int;
    -> declare aid int;
    -> declare done int default false;
    -> # 定义游标
    -> declare num_cursor cursor for select id,num from goods;
    -> #指定游标循环结束时的返回值
    -> declare continue handler for not found set done = true;
    -> # 打开游标
    -> open num_cursor;
    -> # 从游标中提取数据
    -> fetch num_cursor into aid,anum;
    -> while(not done) do
    ->   if (anum <= 10) then set anum = anum + 10;
    ->   else set anum = anum + 5;
    ->   end if;
    ->   select anum;
    ->   update goods set num = anum where id =aid;
    ->   fetch num_cursor into aid,anum;
    -> end while;
    -> # 关闭游标
    -> close num_cursor;
    -> end$
Query OK, 0 rows affected (0.00 sec)

mysql> select * from goods $
+--------+------+------+
| name   | id   | num  |
+--------+------+------+
| 苹果   |    1 |   19 |
| 香蕉   |    2 |   15 |
| 西瓜   |    3 |   20 |
+--------+------+------+
3 rows in set (0.00 sec)
tips
  • 不像多数DBMS,MySQL游标只能用于存储过程和函数。
  • 隐含关闭。如果你不明确关闭游标,MySQL将会在到达end语句时自动关闭它。
  • declare语句的次序。declare语句的发布存在特定的次序。用declare语句定义的局部变量必须在定义任意游标或句柄之前定义,而句柄必须在游标之后定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值