iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL游标详细介绍
  • 781
分享到

MySQL游标详细介绍

2024-04-02 19:04:59 781人浏览 薄情痞子
摘要

目录1、什么是游标(或光标)2、如何使用游标1、声明游标2、打开游标3、使用游标4、关闭游标3、代码举例4、小结1、什么是游标(或光标) 虽然我们也可以通过筛选条件 WHERE

1、什么是游标(或光标)

虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录、向后定位一条记录,或者是随意定位到某一条记录,并对记录的数据进行处理。

这个时候,就可以用到游标。游标,提供了一种灵活的操作方式,让我们能够对结果集中的每一条记录进行定位,并对指向的记录中的数据进行操作的数据结构游标让 SQL 这种面向集合的语言有了面向过程开发的能力。

sql 中,游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。这里游标充当了指针的作用,我们可以通过操作游标来对数据行进行操作Mysql中游标可以在存储过程和函数中使用

比如,我们查询了 employees 数据表中工资高于15000的员工都有哪些:


SELECT employee_id,last_name,salary FROM employees
WHERE salary > 15000;

请添加图片描述

这里我们就可以通过游标来操作数据行,如图所示此时游标所在的行是“108”的记录,我们也可以在结果集上滚动游标,指向结果集中的任意一行。

2、如何使用游标

游标必须在声明处理程序之前被声明,并且变量和条件还必须在声明游标或处理程序之前被声明。

1、声明游标

语法格式:


DECLARE 游标名 CURSOR FOR 查询语句; 

要使用 SELECT 语句来获取数据结果集,而此时还没有开始遍历数据,这里 查询语句代表的是 SELECT 语句,返回一个用于创建游标的结果集

举例:


DECLARE emp_cur CURSOR FOR 
SELECT employee_id,salary FROM employees;

2、打开游标

语法格式:


OPEN 游标名;

当我们定义好游标之后,如果想要使用游标,必须先打开游标。打开游标的时候 SELECT 语句的查询结果集就会送到游标工作区,为后面游标的逐条读取结果集中的记录做准备。

3、使用游标

语法格式:


FETCH 游标名 INTO var_name [, var_name] ...

这句的作用是使用 游标名这个游标来读取当前行,并且将数据保存到 var_name 这个变量中,游标指针指到下一行。如果游标读取的数据行有多个列名,则在 INTO 关键字后面赋值给多个变量名即可。

注意: var_name必须在声明游标之前就定义好。

举例:


FETCH emp_cur INTO emp_id, emp_sal ;

注意: 游标的查询结果集中的字段数,必须跟 INTO 后面的变量数一致

4、关闭游标

语法格式:


CLOSE 游标名;

当我们使用完游标后需要关闭掉该游标。因为游标会占用系统资源,如果不及时关闭,游标会一直保持到存储过程结束,影响系统运行的效率。而关闭游标的操作,会释放游标占用的系统资源。

关闭游标之后,我们就不能再检索查询结果中的数据行,如果需要检索只能再次打开游标。

3、代码举例


#创建存储过程“get_count_by_limit_total_salary()”,
#声明IN参数 limit_total_salary,DOUBLE类型;声明OUT参数total_count,INT类型。
#函数的功能可以实现累加薪资最高的几个员工的薪资值,
#直到薪资总和达到limit_total_salary参数的值,返回累加的人数给total_count。

DELIMITER $
CREATE PROCEDURE get_count_by_limit_total_salary(IN limit_total_salary DOUBLE,OUT total_count INT)
BEGIN
	DECLARE count_emp INT DEFAULT 0;	#用来记录人数,默认值是0
	DECLARE sum_sal DOUBLE DEFAULT 0;	#记录总薪资
	DECLARE one_sal DOUBLE DEFAULT 0;	#记录一个人的薪资
	
	#声明游标,把查询到的工资结果集从高到低排序
	DECLARE emp_cur CURSOR FOR SELECT salary FROM employees ORDER BY salary DESC;
	
	OPEN emp_cur;	#打开游标
	
	#用循环语句遍历,知道总薪资满足题目要求
	REPEAT
		#开始使用游标
		FETCH emp_cur INTO one_sal;
		
		SET sum_sal = sum_sal + one_sal;
		SET count_emp = count_emp + 1;
		
		UNTIL sum_sal >= limit_total_salary
		
	END REPEAT;
	CLOSE emp_cur;	#关闭游标
	
	#把结果返回给total_count
	SELECT count_emp INTO total_count;
END $
DELIMITER ;

CALL get_count_by_limit_total_salary(30000,@count);
SELECT @count;

思路分析: 先创建存储过程,然后再根据实际情况declare自己需要的变量来满足题目的要求,游标要按步骤来:创建游标、打开游标、使用游标最后再关闭游标;其中要注意使用游标在循环中,可以提高代码的简洁度。

4、小结

游标是 mysql 的一个重要的功能,为逐条读取结果集中的数据,提供了完美的解决方案。跟在应用层面实现相同的功能相比,游标可以在存储程序中使用,效率高,程序也更加简洁。

但同时也会带来一些性能问题,比如在使用游标的过程中,会对数据行进行,这样在业务并发量大的时候,不仅会影响业务之间的效率,还会消耗系统资源,造成内存不足,这是因为游标是在内存中进行的处理。

建议: 养成用完之后就关闭的习惯,这样才能提高系统的整体效率。

爱在结尾:游标的使用结合了以前学习过的存储过程、流程控制以及用户自定义变量相关的知识点,单单看游标这一个知识点是不难的,自己还是应该多多回顾以前学过的知识点,做到融会贯通。

到此这篇关于MySQL游标详细介绍的文章就介绍到这了,更多相关MySQL游标内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL游标详细介绍

本文链接: https://www.lsjlt.com/news/160417.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL游标详细介绍
    目录1、什么是游标(或光标)2、如何使用游标1、声明游标2、打开游标3、使用游标4、关闭游标3、代码举例4、小结1、什么是游标(或光标) 虽然我们也可以通过筛选条件 WHERE...
    99+
    2024-04-02
  • mysql事务详细介绍
    目录简介事务四个特性事务隔离级别验证MVCC当前读快照读当前读、快照读、MVCC关系mvcc 解决的问题MVCC实现原理可见性规则简介 事务是由一组sql语句组成的逻辑处理单元 事务...
    99+
    2024-04-02
  • MySQL游标的介绍与使用
    目录定义游标的作用游标的使用游标语法条件处理创建表-test1-test2-test3测试游标过程解析定义 游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行遍历数据的...
    99+
    2022-12-16
    MySQL游标 MySQL游标是什么
  • MySQL索引的详细介绍
    这篇文章主要介绍MySQL索引的详细介绍,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、什么是索引?  在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的...
    99+
    2024-04-02
  • C++的sstream标准库详细介绍
    C++的sstream标准库介绍 接下来我们继续看一下C++风格的串流控制 ,C++引入了ostringstream、istringstream、stringstream这三个类,要...
    99+
    2022-11-15
    sstream C++
  • Mysql优化方法详细介绍
    目录1、字段属性2、字段NOT NULL3、JOIN代替子查询4、UNION代替手动创建临时表5、事务6、索引下面聊聊mysql常见的优化方法。 1、字段属性 mysql是一...
    99+
    2023-02-03
    Mysql优化 Mysql优化方法
  • MySQL主从复制详细介绍
    一、主从复制的目的 ​ MySQL内建的复制功能是构建基于MySQL的大规模、高性能应用的基础,复制功能的目的是构建高性能的应用,同时也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。比较常见的用途有以下几种: 数据分布:备份...
    99+
    2023-08-20
    mysql 数据库 服务器
  • MySQL 中字符集详细介绍
    目录MySQL 中的 UTF8修改MySQL数据库的编码字符集的比较规则MySQL查询时区分大小写MySQL 中的 UTF8 在 MySQL 中, utf8 编码格式有点特殊, 它不...
    99+
    2024-04-02
  • springMVC详细介绍
    目录springMVC简介SpringMVC框架的优点第一个SpringMVC程序第一步:创建maven-web项目第二步:在pom.xml中添加依赖和插件第三步注册中央调度器第四步...
    99+
    2024-04-02
  • OAuth2 详细介绍!
    目录 一、文章介绍 二、OAth2 2.1 简介 2.2 OAuth2  授权总体流程 2.3 四种授权模式 1.授权码模式 2.简化模式 3.密码模式 4. 客户端模式 2.4 OAuth2 标准接口 2.5 GitHub 授权登录 1...
    99+
    2023-09-15
    github java
  • DockerCompose详细介绍
    目录一、Docker Compose的安装二、Docker Compose的基本使用三、Docker Compose的高级功能四、总结一、Docker Compose的安装 Dock...
    99+
    2023-05-16
    Docker Compose详解 Docker Compose
  • NodeJs操作MYSQL方法详细介绍
    目录在项目中操作数据库的步骤安装与配置 mysql 模块1. 安装 mysql 模块2. 配置 mysql 模块3. 测试 mysql 模块能否正常工作使用 mysql 模块操作 M...
    99+
    2024-04-02
  • mysql慢查询功能详细介绍
    这篇文章主要讲解了“mysql慢查询功能详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql慢查询功能详细介绍”吧!开启mysql慢查询日志1....
    99+
    2024-04-02
  • MySQL Innodb索引机制详细介绍
    1、什么是索引 索引是存储引擎用于快速找到记录的一种数据结构。 2、索引有哪些数据结构 顺序查找结构:这种查找效率很低,复杂度为O(n)。大数据量的时候查询效率很低。 ...
    99+
    2024-04-02
  • mysql表分区技术详细介绍
    1、概述     数据库单表到达一定量后,性能会有衰减,像mysql\sql server等犹为明显,所以需要把这些数据进行分区处理。同时有时候可能出现数据剥离什么的,分区...
    99+
    2024-04-02
  • MySQL之存储函数详细介绍
    目录1、创建存储函数2 、调用存储函数3、删除存储函数4、查看存储过程5、修改存储函数6、对比存储函数和存储过程7、练习题加强1、创建存储函数 语法格式: CREATE FUNC...
    99+
    2024-04-02
  • javascript this详细介绍
    this的值是在运行时确定的  JS中的this究竟代表什么,这是在程序运行时根据上下文环境确定,可以分为以下几种情况。  1. 全局作用域中的this  在全局作用域中,this指向window对象。    1  2  3  4  5  ...
    99+
    2023-06-03
  • 【JAVA IO 详细介绍】
    JAVA IO 详细介绍 目录一、什么是IO?1.1 IO的介绍1.2 流的介绍1.2.1 流的特征1.2.2 数据流的特征1.2.3 输入流的特征1.2.4 输出流的特征 二、...
    99+
    2023-10-26
    java
  • SQL Server中的游标介绍
    游标是面向行的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能。 在性能上,游标会吃更多的内存,减少可用的并发,占用带宽,锁定资源,当然还有更多的代码量。用一个比喻来说...
    99+
    2024-04-02
  • Java maven详细介绍
    目录maven什么是maven仓库的种类仓库的配置本地仓库配置私服配置中央仓库配置maven标准目录结构常用命令maven项目的生命周期pom.xml依赖适用域总结maven 什么是...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作