zoukankan      html  css  js  c++  java
  • MySQL基础之使用游标

    游标

    使用简单的SELECT语句, 没有办法得到第一行、下一行、或前10行, 也不存在每次一行地处理所有行的简单方法

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

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

    MySQL的游标只能用户存储过程(和函数)

    使用游标

    使用游标有几个明确的步骤

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

    创建游标

    游标用DECLARE语句创建。DECLARE命名游标, 并定义相应的SELECT语句, 根据需要带WHERE和其他子句。

    MariaDB [crashcourse]> DELIMITER $
    MariaDB [crashcourse]> CREATE PROCEDURE productorders()
        -> BEGIN
        -> DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders;
        -> END $

    存储过程处理完后, 游标就消失, 因为它局限于存储过程。

    打开和关闭游标

    游标用OPEN CURSOR语句来打开

    MariaDB [crashcourse]>  OPEN ordernumbers;

    在处理OPEN语句时执行查询, 存储检索出的数据以供浏览和滚动。

    游标处理完后, 应当使用如下语句关闭游标

    MariaDB [crashcourse]>  CLOSE ordernumbers;

    CLOSE释放游标使用的所有内部内存和资源, 因此在每个游标不再需要时应该关闭。

    在一个游标关闭后, 如果没有重新打开, 则不能使用它了。但是, 使用声明过的游标不需要再次声明, 用OPEN打开它就可以了

    MariaDB [crashcourse]> DELIMITER $
    MariaDB [crashcourse]> CREATE PROCEDURE productorders()
        -> BEGIN
        ->  -- Declare the cursor
        ->  DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders;
        ->  
        ->  -- Open the cursor
        ->  OPEN ordernumbers;
        ->
        ->  --Close the cursor
        ->  CLOSE ordernumbers;    
        -> END $

    使用游标数据

    在一个游标被打开后, 可以使用FETCH语句分别访问它的每一行。FETCH指定检索什么数据(所需的列), 检索出来的数据存储在什么地方。它还向前移动游标中的内部行指针, 使下一条FETCH语句检索下一行

    MariaDB [crashcourse]> DELIMITER $
    MariaDB [crashcourse]> CREATE PROCEDURE productorders()
        -> BEGIN
        -> 
        ->  --Declare local variables
        ->  DECLARE o INT;
        ->  
        ->  -- Declare the cursor
        ->  DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders;
        ->  
        ->  -- Open the cursor
        ->  OPEN ordernumbers;
        ->
        ->  -- Get order number
        ->  FETCH ordernumbers INTO o
        ->
        ->  --Close the cursor
        ->  CLOSE ordernumbers;    
        -> 
        -> END $

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

  • 相关阅读:
    速耀达数据库安装(速达二次开发)
    WCF错误:由于目标计算机积极拒绝,无法连接;127.0.0.1:3456
    HTTP 错误 403.14
    速耀达企业ERP试用说明流程
    速耀达ERP手机App开始内测,完全兼容速达5000以上的任何版本
    新版速云达App即将发布内测
    如何解决速达软件出现主键、单号、编码相同的报错
    NTP服务器搭建
    linux操作系统不重启添加raid0步骤
    反向代理负载均衡调度:nginx
  • 原文地址:https://www.cnblogs.com/featherwit/p/13435850.html
Copyright © 2011-2022 走看看