前言
要明白什么是游标,首先要了解存储过程,存储过程是事先经过编译并且存储在数据库中的一段SQL语句,他可以接受参数,也可以在其中使用IF
语句、设置变量、循环等,比如下面语句用于创建一个存储过程。
1 | sql复制代码delimiter $$ |
调用存储过程。
1 | sql复制代码mysql> call select_all;$$ |
存储过程可以减少数据库和应用服务器之间的传输,对提供数据库处理效率还是有好处的,而游标(Cursor)有的地方又叫光标,可以在存储过程中,对结果集进行循环处理,但是目前,MySQL只允许我们从SELECT
语句从头到尾获取结果集中的每一行,无法从最后一行获取到第一行,也无法直接跳转到结果集中的指定行。
使用游标有以下几个步骤。
- 游标定义
1 | sql复制代码DECLARE cursor_name CURSOR FOR select_statement |
- 打开游标
1 | sql复制代码OPEN cursor_name; |
- 获取游标中的数据
1 | sql复制代码FETCH cursor_name INTO var_name [, var_name]... |
4.关闭光标
1 | sql复制代码CLOSE cursor_name; |
- 释放光标
1 | sql复制代码DEALLOCATE cursor_name; |
实例
创建表
1 | sql复制代码CREATE TABLE cursor_table |
下面我们通过游标,遍历cursor_table表,把年龄大于30的人名存放到cursor_table_user
1 | sql复制代码drop procedure getTotal; |
1 | sql复制代码call getTotal(); |
这段程序有一行非常重要,DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
,他表示如果游标或SELECT语句没有数据的时候,将done
变量的值设置 为 true,用来退出循环。
下面就是通过WHILE来依次遍历。
本文转载自: 掘金