MySQL:游标

游标

我们来回顾一下之间接触的内容:

检索方式 功能
一般检索 直接按照一定的条件,将所有符合的数据组合成一个结果集返回
计算字段 对检索的结果集进行整合,或者是进行运算
聚集函数 对数据集进行整体的整合分析
子查询 以一次检索的数据为基准,对这些结果进行再一次的搜索
联结 将不同表中有关联的数据,整合到一个结果集中
组合查询 将多个检索的结果,组合到一个结果集中
全文本搜索 是一种智能的搜索,可以有效地对文本数据进行检索

以上就是我们之前看过的知识了,不过我们发现这些操作都是对于一个结果集合而言的。但是在现实操作中我们可能需要对数据进行逐行处理,这个要求在上述的操作中都难以实现,即使可以强行实现也会有严重的性能问题。

使用游标

对于逐行操作的需求,可以使用游标 (cursor)来实现。游标是一个存储在 MySQL 服务器上的数据库查询,与 SELECT 不同的是右边本身就是通过检索构建的一个新的可调用的检索集合。游标可以理解为 C/C++ 中的指针,对于某一个结构可以用指针去访问值,游标的原理就与之类似。对于游标的使用,有以下的操作顺序:

  1. 定义游标,并且封装建立结果集所使用的 SELECT 语句;
  2. 打开游标;
  3. 使用封装的 SELECT 检索数据;
  4. 在游标填充数据的情况下,按需对行进行操作;
  5. 关闭游标;

游标操作

创建游标

在 MySQL 中,游标只能应用于存储过程和函数,因此对于游标的创建,首先还是得先拥有一个存储过程。拥有存储过程之后就使用 DECLARE 语句定义游标,这些语句就放到存储过程的 BEGINEND 之间。代码框架如下:

DECLARE cursor_name CURSOR
FOR
SELECT 语句;

打开游标

使用游标时必须要先打开,打开之后就可以对数据进行浏览了,打开语句如下:

OPEN cursor_name;

关闭游标

游标使用完毕之后要把其关掉,关闭时占用的内存和资源会被自动释放。游标被关闭之后就不能再使用,但是可以再次被打开。语句为:

CLOSE cursor_name;

使用游标数据

使用游标数据时要用到 FETCH 语句来逐行访问,需要给出访问所需的列,这样便于游标去定向访问,同时这个语句还会促使游标向下一行移动。语句为:

FETCH row_name INTO variable;

这个语句可以用来检索指定的行,并且注入到一个变量当中。

重复操作

FETCH 语句可以将游标推进到下一行,但是它只进行一次操作,并不能实现逐行处理。这里可以使用重复语句 REPEAT

REPEAT
    MySQL 代码
UNTIL 条件语句 END REPEAT;

这个语句可以重复执行中间的代码,直到条件语句中的条件为真之后结束。

条件处理

DECLARE CONTINE HANDLER 表达式 1 SET 表达式 2:

这段代码的作用是定义一个 CONTINE HANDLER,这个的作用是当表达式 1 的条件出现时,将执行表达式 2 的语句。用这个语句可以实现条件的变更。

实例

下面使用上述的所有操作,给出相对完整的右边应用实例。

启用存储过程,并对其内容进行查看。

同时也可以去查看数据库,会发现多了一张新建的表。

参考资料

《MySQL Crash Course》[英] Ben Forta 著,刘晓霞 钟鸣 译,人民邮电出版社
mysql游标的用法及作用

posted @ 2021-04-25 10:29  乌漆WhiteMoon  阅读(1550)  评论(0编辑  收藏  举报