mysql中游标学习笔记
- 95 次检阅

因为之前的某些原因,逃了一次搞基数据库的课程.趁着这次失眠就把游标的知识学习一遍吧...


首先,mysql游标是什么?

游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。

可理解为“游动的光标...

其次,游标的使用步骤

  • 声明/定义一个游标

declare 声明;declare 游标名 cursor for select_statement;

  • 打开一个游标

open 打开;open 游标名

  • 操作游标/取值

fetch 取值;fetch 游标名 into var1,var2[,...]

  • 关闭游标

close 关闭;close 游标名;

  • NOT FOUND条件处理函数

declare continue handler for NOT FOUND +需要执行的语句

这次以一个简单的案例来说下步骤?

用存储过程游标为student_info表统计各个学生总分(total)字段值

总分=数学成绩+语文成绩+音乐成绩+历史成绩

首先我们先建一个mysql存储过程(未使用游标)

执行结果:

使用游标:

执行结果:

这时候你会发现我们只得到了一个查询结果,这是因为游标每次只能返回一次,所以我改了下代码

结果:

发现什么了吗?相同的语句,我们每取一次就往后游一次,有几次就游几次,直到你把游完所有标识

但是当你超出了你所需要遍历的值时,会出现

 

这个错误告诉我们游标已经走完了...

所以我又换了一个方法,用select count(*)计算所有行的数量

结果:

但是这个方法是我们自己打出来的,而mysql 有repeat---until,我们可以结合NOT FOUND条件处理

结果:

你会发现最后一个出现了两次...

解决方案:声明处理的hanlder不再是continue,而是exit即可达到目的。

即:declare exit handler for NOT FOUND set cur_end=1;

到这里为止...上面的作业也很容易做出来了

 

分享到:

这篇文章还没有评论

发表评论