SQL游标

什么是游标?游标的作用

游标实际上是一种控制数据集的更加灵活的处理方式。

游标提供了一种灵活的操作方式,让我们从数据结果集中每次提取一条数据记录进行操作。游标让 SQL 这种面向集合的语言有了面向过程开发的能力。可以说,游标是面向过程的编程方式,这与面向集合的编程方式有所不同。

在 SQL 中,游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。这里游标充当了指针的作用,我们可以通过操作游标来对数据行进行操作。

游标的使用

想要使用游标,一般需要经历五个步骤。

第一步,定义游标。

DECLARE cursor_name CURSOR FOR select语句

eg:

DECLARE cur_hero CURSOR FOR SELECT hp_max FROM heros;

第二步,打开游标。

OPEN cursor_name

第三步,从游标中取得数据。

FETCH cursor_name INTO var_name...

这句的作用是使用 cursor_name 这个游标来读取当前行,并且将数据保存到 var_name 这个变量中,游标指针指到下一行。如果游标读取的数据行有多个列名,则在 INTO 关键字后面赋值给多个变量名即可。

第四步,关闭游标。

CLOSE cursor_name

第五步,释放游标

DEALLOCATE cursor_name

DEALLOCATE 的作用是释放游标,如果不释放游标,游标会一直存在于内存中,直到进程结束后才会自动释放。

存储过程处理游标溢出:

当游标溢出时(也就是当游标指向到最后一行数据后继续执行会报的错误),我们可以定义一个 continue 的事件,指定这个事件发生时修改变量 done 的值,以此来判断游标是否已经溢出。同时在循环中我们需要加上对 done 的判断,如果游标的循环已经结束,就需要跳出 read_loop 循环

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;

OPEN cur_hero;

read_loop:LOOP

FETCH cur_hero INTO hp;

IF done THEN

                          LEAVE read_loop;

END IF;

 

游标的应用场景

因为游标足够灵活,所以游标一般用来处理需要进行一些复杂的数据行计算的问题。但是使用游标也会带来性能问题,使用游标时会对数据加锁(为什么会加锁:在 SQL 中,游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。这里游标充当了指针的作用),这样在业务并发量大的时候,不仅会影响业务之间的效率,还会消耗系统资源,造成内存不足,

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值