当前位置: 首页 > news >正文

MySQL 游标

文章目录

  • 1.游标是什么
  • 2.MySQL 游标
  • 3.定义游标
  • 4.打开游标
  • 5.提取数据
  • 6.关闭游标
  • 参考文献

1.游标是什么

游标(Cursor)是一种用于处理查询结果集的数据库对象,它允许开发者按照特定的顺序逐行遍历查询结果集中的数据。游标通常用于在数据库中执行复杂的操作,例如遍历结果集、逐行处理数据、执行更新或删除操作等。

游标的基本思想是将查询结果集封装成一个数据结构,使得开发者可以在程序中按照自己的需求处理这些数据。游标可以类比为一个指向结果集中某一行的指针,您可以在结果集中移动这个指针,从而处理每一行数据。

使用 SQL 游标一般遵循如下步骤。

  1. 声明游标。首先,您需要声明一个游标,将查询结果集与游标关联起来。
  2. 打开游标。在需要使用游标之前,您需要打开游标,使其准备好用于遍历数据。
  3. 遍历数据。您可以使用游标的操作来逐行地获取数据,并在每一行上执行操作。
  4. 关闭游标。当您完成了对结果集的操作后,应该关闭游标以释放资源。

2.MySQL 游标

MySQL 支持存储程序(如存储过程、函数和触发器)中使用游标。语法与嵌入式SQL中的语法相同。

MySQL 游标具有以下属性:

  • 敏感不定(Asensitive)

服务器可能会也可能不会复制其结果集。如果复制的话,为不敏感游标,游标使用实际数据的副本。如果不复制的话,为敏感游标,游标指向实际数据,其他连接所做的任何更改都将影响游标正在使用的数据。

  • 只读(Read only)

无法通过游标更新表中的数据。

  • 不可滚动(Nonscrollable)

只能沿一个方向遍历,不能跳过行。

游标声明必须出现在处理程序声明之前以及变量和条件声明之后。

下面是一个来自官网的例子。

CREATE PROCEDURE curdemo()
BEGINDECLARE done INT DEFAULT FALSE;DECLARE a CHAR(16);DECLARE b, c INT;DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN cur1;OPEN cur2;read_loop: LOOPFETCH cur1 INTO a, b;FETCH cur2 INTO c;IF done THENLEAVE read_loop;END IF;IF b < c THENINSERT INTO test.t3 VALUES (a,b);ELSEINSERT INTO test.t3 VALUES (a,c);END IF;END LOOP;CLOSE cur1;CLOSE cur2;
END;

3.定义游标

DECLARE cursor_name CURSOR FOR select_statement

该语句声明一个游标并将其 SELECT 语句结果集关联起来。要稍后获取行,请使用 FETCH 语句。 SELECT 语句检索的列数必须与 FETCH 语句中指定的输出变量数匹配。

SELECT 语句不能有 INTO 子句。

存储程序可以包含多个游标声明,但给定块中声明的每个游标必须具有唯一的名称。

4.打开游标

OPEN cursor_name

这个语句打开先前声明的游标。

5.提取数据

FETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ...

此语句获取与指定游标(必须打开)关联的 SELECT 语句的下一行,并推进游标指针。 如果行存在,则获取的列存储在命名变量中。 SELECT 语句检索的列数必须与 FETCH 语句中指定的输出变量数匹配。

如果没有更多行可用,则会出现“无数据”条件,且 SQLSTATE 值为“02000”。 要检测此条件,您可以为其设置处理程序(或为 NOT FOUND 条件设置处理程序),请参考文首的示例。

6.关闭游标

CLOSE cursor_name

此语句关闭先前打开的游标。

如果游标未打开,则会发生错误。

如果未显式关闭,游标将在声明它的 BEGIN … END 块的末尾处自动关闭。


参考文献

MySQL 8.0 Reference Manual :: 13.6.6 Cursors

相关文章:

MySQL 游标

文章目录 1.游标是什么2.MySQL 游标3.定义游标4.打开游标5.提取数据6.关闭游标参考文献 1.游标是什么 游标&#xff08;Cursor&#xff09;是一种用于处理查询结果集的数据库对象&#xff0c;它允许开发者按照特定的顺序逐行遍历查询结果集中的数据。游标通常用于在数据库中执…...

ElasticSearch 7.4学习记录(DSL语法)

上文和大家一起初次了解了很多ES相关的基础知识&#xff0c;本文的内容将会是实际企业中所需要的吗&#xff0c;也是我们需要熟练应用的内容。 面对ES&#xff0c;我们最多使用的就是查询&#xff0c;当我负责这个业务时&#xff0c;现不需要我去考虑如何创建索引&#xff0c;添…...

全志orangepi-zero2驱动编写2,控制电平高低

使用驱动编写控制高低电平 可看我前俩篇文章&#xff1a; 【1】全志orangepi-zeor2驱动编写 【2】驱动函数框架详解 检索芯片手册关键信息 知道GPIO基地址 知道PC偏移地址 知道想要控制的端口的信息 知道数据位如何操作 代码实操 驱动代码 #include <linux/fs.h&…...

软考高级系统架构设计师系列之:论文典型试题写作要点和写作素材总结系列文章四

软考高级系统架构设计师系列之:论文典型试题写作要点和写作素材总结系列文章四 一、论软件的静态演化和动态演化及其应用1.论文题目2.写作要点和写作素材二、论大规模分布式系统缓存设计策略1.论文题目2.写作要点和写作素材三、论基于REST服务的Web应用系统设计1.论文题目2.写…...

06.利用Redis实现点赞功能

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redisson实现点赞功能 学习产出&#xff1a; 解决方案&#xff1a; 点赞后的用户记录在Redis的set数据类型中 1. 准备pom环境 <dependency><groupId>org.springframework.boot</groupId><artifactI…...

【React】生命周期和钩子函数

概念 组件从被创建到挂载到页面中运行&#xff0c;再到组件不用时卸载的过程。 只有类组件才有生命周期。 分为三个阶段&#xff1a; 挂载阶段更新阶段销毁阶段 三个阶段 挂载阶段 钩子函数 - constructor 创建阶段触发 作用&#xff1a;创建数据 之前定义状态是简写&…...

无涯教程-TensorFlow - 优化器

Optimizers是扩展类&#xff0c;其中包括用于训练特定模型的附加信息&#xff0c;Optimizers类使用给定的参数初始化&#xff0c;用于提高速度和性能&#xff0c;以训练特定模型。 TensorFlow的基本Optimizers是- tf.train.Optimizer 此类在tensorflow/python/training/opti…...

基于AQS+双向链表实现队列先进先出

学习AQS写的一个模拟案例 package com.tom.xiangyun.ch04_aqs;import com.tom.tuling.UnsafeFactory; import sun.misc.Unsafe;import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantLock;/*** 使用双向链表实现队列** author 钟棋…...

无涯教程-Perl - time函数

描述 此函数返回自纪元以来的秒数(对于大多数系统,是1970年1月1日UTC,00:00:00&#xff1b;对于Mac OS,是1904年1月1日,00:00:00)。适用于gmtime和本地时间。 语法 以下是此函数的简单语法- time返回值 此函数返回自纪元后数秒的整数。 例 以下是显示其基本用法的示例代…...

CUDA Bug<三>当__global__函数出现里面所有输出的数组都随机赋值了

问题具体描述&#xff1a; eg. __global__ void Updata_HomJm(float* H,float *HJm,float* fr,float *gr,float* ur,float* urgrJm,float*wpd,float *w, float *wJm,int n) { int idx blockIdx.x*blockDim.x threadIdx.x;float t 0.0;//H*zpint idx_Ai idx*n;for (int j…...

甜椒叶病害识别(Python代码,pyTorch框架,深度卷积网络模型,很容易替换为其它模型,带有GUI识别界面)

代码运行要求&#xff1a;Torch>1.13.1即可 1.数据集介绍&#xff1a; 第一个文件夹是细菌斑叶&#xff08;3460张&#xff09; 第二个文件夹是 健康&#xff08;4024张&#xff09; 2.整个文件夹 data文件夹存放的是未被划分训练集和测试集的原始照片 picture文件夹存放的…...

Python爬虫——scrapy_日志信息以及日志级别

日志级别&#xff08;由高到低&#xff09; CRITICAL&#xff1a; 严重错误 ERROR&#xff1a; 一般错误 WARNING&#xff1a; 警告 INFO&#xff1a; 一般警告 DEBUG&#xff1a; 调试信息 默认的日志等级是DEBUG 只要出现了DEBUG或者DEBUG以上等级的日志&#xff0c;那么这些…...

微信小程序 echarts 画多个横向柱状图

然后是json {"usingComponents": {"ec-canvas": "../../common/ec-canvas/ec-canvas"},"navigationBarTitleText": "主题活动" } ec-canvas获取方式 在链接里下载代码 然后copy ec-canvas文件夹到自己的项目 https://gi…...

【二叉树】572. 另一棵树的子树

572. 另一棵树的子树 解题思路 遍历二叉树的思路针对每一个节点判断该节点的子树和subtree是不是相等需要编写判断两个子树是否相等的函数 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* …...

220V转5V芯片三脚芯片-AH8652

220V转5V芯片三脚芯片是一种非常常见的电源管理芯片&#xff0c;它通常被用于将高压交流输入转为稳定的直流5V输出。芯片型号AH8652是一款支持交流40V-265V输入范围的芯片&#xff0c;采用了SOT23-3三脚封装。该芯片内部集成了650V高压MOS管&#xff0c;能够稳定地将输入电压转…...

windows系统丢失mfc120u.dll的解决方法

1.mfc120u.dll是什么 mfc120u.dll是Windows操作系统中的一个动态链接库&#xff08;Dynamic Link Library&#xff0c;简称DLL&#xff09;文件。它包含了一些用于运行C程序的函数和其他资源。这个特定的DLL文件是Microsoft Foundation Classes&#xff08;MFC&#xff09;库的…...

css 实现电梯导航

实现原理&#xff1a;利用css实现电梯导航很简单&#xff0c;基本原理就是通过a标签绑定跳转目标的id来实现的 html代码&#xff1a; <div class"body"><div class"top" id"top"></div><div class"con1" id"…...

【Spring Boot】Spring Retry减少1000 行代码讲解

文章目录 前言问题介绍解决方案Let’s start hacking!1. 设置 Spring 重试2. 重构代码 总结 前言 本文翻译自国外论坛 medium&#xff0c;原文地址&#xff1a;levelup.gitconnected.com/how-i-delet…&#xff0c;原文作者&#xff1a;Hari Ohm Prasath 使用 Spring Retry 重…...

【数据结构OJ题】相交链表

原题链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 看到这道题&#xff0c;很容易想到的方法就是暴力求解&#xff0c;就是将一个链表的每个结点的地址…...

【华为OD机试】最小传输时延I【2023 B卷|200分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 某通信网络中有N个网络结点,用1到N进行标识。网络通过一个有向无环图表示, 其中图的边的值表示结点之间的消息传递时延。 现给定相连节点之间的时延列表times[i]={u,v,w},其中u表示…...

告别切换烦恼!Ubuntu双输入法配置指南(IBus+Fcitx五笔)

Ubuntu双输入法高效配置指南&#xff1a;IBus拼音与Fcitx五笔的完美共存方案 对于需要同时使用拼音和五笔输入的开发者来说&#xff0c;Ubuntu系统下的输入法配置往往令人头疼。本文将详细介绍如何实现IBus智能拼音与Fcitx五笔输入法的和谐共存&#xff0c;解决框架冲突、优先级…...

效率倍增:用快马平台智能优化你的openclaw更新工作流

最近在折腾openclaw的更新命令时&#xff0c;发现每次手动输入各种参数和检查依赖实在太费时间了。经过一番摸索&#xff0c;我发现用InsCode(快马)平台可以大幅优化这个流程&#xff0c;今天就把我的经验分享给大家。 智能参数补全 以前最头疼的就是记不住各种参数组合&#x…...

从CORS到自定义,让你的API更健壮

一、中间件是啥&#xff1f;咱用“餐厅”打个比方想象一下&#xff0c;你的FastAPI应用是个高级餐厅。&#x1f449; 顾客&#xff08;客户端请求&#xff09;来到门口。- 迎宾&#xff08;CORS中间件&#xff09;&#xff1a;先看你是不是从允许的街区&#xff08;域名&#x…...

10-红外接收探头电路设计实战指南

1. 红外接收探头基础入门 第一次接触红外接收探头时&#xff0c;我也被那一堆专业术语搞得晕头转向。其实这东西就像个"红外线翻译官"&#xff0c;专门把遥控器发来的红外光信号转换成电信号。市面上常见的HS0038、LF0038L这些型号&#xff0c;本质上都是将光敏二极…...

绝地求生罗技鼠标宏配置全攻略:从零到精通的压枪优化指南

绝地求生罗技鼠标宏配置全攻略&#xff1a;从零到精通的压枪优化指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中的枪口…...

孟德尔随机化实战(五)—— 告别报错!Error in if (out == “[]“) 深度解析与TwoSampleMR参数调优全攻略

1. 报错现象深度解析&#xff1a;为什么会出现"参数长度为零"&#xff1f; 最近在孟德尔随机化分析交流群里&#xff0c;这个报错出现的频率简直高得离谱&#xff1a;"Error in if (out "[]") { : argument is of length zero"或者它的中文版&q…...

C盘清理与优化:为Realistic Vision V5.1模型文件腾出空间

C盘清理与优化&#xff1a;为Realistic Vision V5.1模型文件腾出空间 你是不是也遇到过这种情况&#xff1a;电脑C盘突然飘红&#xff0c;系统提示空间不足&#xff0c;想下载个新的AI模型&#xff0c;比如最近很火的Realistic Vision V5.1&#xff0c;却发现根本没地方放。看…...

SJA1105Q升级踩坑记:RGMII V2.0时序下,33Ω串阻为何成了千兆通信的‘隐形杀手’?

SJA1105Q升级中的RGMII V2.0时序陷阱&#xff1a;33Ω串阻如何摧毁千兆通信稳定性 当NXP SJA1105Q这款号称"增强版"的工业交换机芯片落到我们硬件工程师手中时&#xff0c;谁曾想PCB上那些看似无害的33Ω小电阻&#xff0c;竟会成为千兆通信系统的阿喀琉斯之踵。这不…...

MGeo中文地址结构化教程:从原始文本到标准GeoJSON格式输出的完整转换流程

MGeo中文地址结构化教程&#xff1a;从原始文本到标准GeoJSON格式输出的完整转换流程 1. 引言&#xff1a;为什么我们需要地址结构化&#xff1f; 你有没有遇到过这样的场景&#xff1f;用户填写的收货地址五花八门&#xff1a;“北京市海淀区中关村大街27号”、“北京海淀中…...

OpenClaw密码管理:nanobot安全存储与自动填充方案

OpenClaw密码管理&#xff1a;nanobot安全存储与自动填充方案 1. 为什么需要本地化的密码管理方案 去年的一次数据泄露事件让我彻底放弃了所有云端密码管理器。当时我使用的某知名商业工具突然弹出安全警报&#xff0c;提示"您的部分密码可能已被未授权访问"。虽然…...