zoukankan      html  css  js  c++  java
  • 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游标的用法及作用

  • 相关阅读:
    js实现点击图片 弹出放大效果
    Linux 命令
    前台input输入框,输入内容并同步增加输入框长度
    Git
    Git 常用命令
    Windows环境git执行git add命令warning: ....
    Tomcat配置https、访问http自动跳转至https
    An internal error occurred during: "Importing Maven projects". Unsupported IClasspathEntry kind=4
    自定义滚动条mCustomScrollbar
    本地项目,发布至服务器
  • 原文地址:https://www.cnblogs.com/linfangnan/p/14699355.html
Copyright © 2011-2022 走看看