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的局部声明的变量中。对检索出来的数据不做任何出来

  • 相关阅读:
    共享纸巾更换主板代码分析 共享纸巾主板更换后的对接代码
    Python Django Ajax 传递列表数据
    Python Django migrate 报错解决办法
    Python 创建字典的多种方式
    Python 两个list合并成一个字典
    Python 正则 re.sub替换
    python Django Ajax基础
    Python Django 获取表单数据的三种方式
    python Django html 模板循环条件
    Python Django ORM 字段类型、参数、外键操作
  • 原文地址:https://www.cnblogs.com/featherwit/p/13435850.html
Copyright © 2011-2022 走看看