美文网首页mysqlMySQL
MySQL——使用游标(十七)

MySQL——使用游标(十七)

作者: 开心糖果的夏天 | 来源:发表于2017-06-28 17:53 被阅读67次

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

一、游标

有时,需要在检索出来的行中前进或者后退一行或多行。这就是使用游标的原因。游标是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。

二、使用游标

使用游标及几个明确的步骤:
(1)在能够使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的SELECT语句。
(2)一旦声明后,必须打开游标以供使用。这个过程用前面定义的SELECT语句把数据实际检索出来。
(3)对于填有数据的游标,根据需要取出(检索)各行。
(4)在结束游标使用时,必须关闭游标

1.创建游标

游标用DECLARE语句创建。DECLARE命名游标,并定
义相应的SELECT语句,根据需要带WHERE和其他子句。例如,以下语句定义了名为ordernumbers的游标,使用了可以检索所有订单的SELECT语句。

CREATE PROCEDURE processorders()
BEGIN
       DECLARE ordernumbers CURSOR
       FOR
       SELECT order_num FROM orders;
END;

DECLARE语句用来定义和命名游标,这里为ordernumbers。存储过程处理完成后,游标就消失(因为它局限于存储过程)。

2.打开和关闭游标

游标用OPEN CURSOR语句来打开:

OPEN ordernumbers;

在处理OPEN语句时执行查询,存储检索出的数据以供浏览和滚动。游标处理完成后,应该使用如下语句关闭游标:

CLOSE ordernumbers;

下面是上述例子的修改版本:

CREATE PROCEDURE processorders()
BEGIN
       DECLARE ordernumbers CURSOR
       FOR
       SELECT order_num FROM orders;

       OPEN ordernumbers;

       CLOSE ordernumbers;
END;

这个存储过程声明、打开和关闭一个游标。但对检索出来的数据什么也没做。

3.使用游标数据

从游标中检索单个行(第一行):

CREATE PROCEDURE processorders()
BEGIN
     DECLARE o INT;
     DECLARE ordernumbers CURSOR
     FOR
     SELECT order_num FROM orders;

     OPEN ordernumbers;
     FETCH ordernumbers INTO o;
     CLOSE ordernumbers;
END;

其中FETCH用来检索当前行的order_num列(将自动从第一行开始)到一个名为o的局部声明的变量中。对检索出来的数据不做任何处理。

循环检索数据,从第一行到最后一行:

CREATE PROCEDURE processorders()
BEGIN
     DECLARE done BOOLEAN DEFAULT 0;
     DECLARE o INT;
     DECLARE ordernumbers CURSOR
     FOR
     SELECT order_num FROM orders;
     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;

     OPEN ordernumbers;
     REPEAT
        FETCH ordernumbers INTO o;
     UNTIL done END REPEAT;
     CLOSE ordernumbers;
END;

其中FETCH用来检索当前行的order_num列到一个名为o的局部声明的变量中。FETCH在REPEAT内,因此它反复执行直到done为真(由UNTIL done END REPEAT;规定)。为了使它起作用,用一个DEFAULT 0(假,不结束)定义变量done。以下的语句可以将done设置为真:

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;

这条语句定义了一个DECLARE CONTINUE,它是在条件出现时被执行的代码。这里,它指出当SQLSTATE '02000' 出现时,SET done=1。SQLSTATE '02000' 是一个未找到条件。当REPEAT由于没有更多的行供循环而不能继续时,出现这个条件。

如果调用这个存储过程,它将定义几个变量和一个CONTINUE HANDLER,定义并打开一个游标,重复读取所有行,然后关闭游标。如果一切正常,可以在循环内放入任意需要的处理(在 FETCH 语句之后,循环结束之前)。

相关文章

  • MySQL——使用游标(十七)

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQ...

  • SQL第21课:使用游标

    mysql 游标的使用 游标是什么?? 游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句...

  • MySQL 游标的基本用法

    MySQL游标只能用于存储过程。使用游标的步骤:①在能够使用游标前,必须声明它。这个过程实际上没有检索数据,它只是...

  • MySQL-与Python交互

    pymysql的使用流程 建立数据库连接 创建游标对象 使用游标对象的方法和SQL语句操控MySQL数据库 提交数...

  • MySQL游标的使用

    创建游标 首先在MySql中创建一张数据表: 我们现在要用存储过程做一个功能,统计iphone的总库存是多少,并把...

  • MySQL优化系列11-MySQL游标和绑定变量

    备注:测试数据库版本为MySQL 8.0 一. MySQL游标简介 MySQL在服务器端提供只读的、单向的游标,而...

  • aiomysql库常用接口

    [aiomysql官网] Connection 连接MySQL的协程: 使用连接创建游标的协程: 参数: curs...

  • MySQL游标循环的使用

    CREATE PROCEDURE test_procedure () BEGIN -- 需要定义接收游标数据的变量...

  • Python: 03. python-pymysql 连接mys

    查询实例 安装pymysql 依赖 02 代码导入pymysql 03 连接mysql 04 打开游标 05 游标...

  • mysql游标

    游标描述: 游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行...

网友评论

    本文标题:MySQL——使用游标(十七)

    本文链接:https://www.haomeiwen.com/subject/qeekcxtx.html