iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mysql 游标的简单使用方法
  • 290
分享到

Mysql 游标的简单使用方法

Mysql游标的简单使用方法 2019-10-02 12:10:30 290人浏览 无得
摘要

一、游标简介 1、游标简介 游标是一个存储在Mysql服务器上的数据库查询,它不是一条select语句,而是被该语句检索出来的结果集。有了游标可以方便的对该结果集进行逐行处理。 游标的设计是一种数据缓冲区的思想,用来存放s

Mysql 游标的简单使用方法

一、游标简介

1、游标简介

游标是一个存储在Mysql服务器上的数据库查询,它不是一条select语句,而是被该语句检索出来的结果集。有了游标可以方便的对该结果集进行逐行处理。 游标的设计是一种数据缓冲区的思想,用来存放sql语句执行的结果。游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
尽管游标能遍历结果中的所有行,但一次只指向一行。

2、游标的特性

游标具有三个属性:
A、不敏感(Asensitive):数据库可以选择不复制结果集
B、只读(Read only)
C、不滚动(Nonscrollable):游标只能向一个方向前进,并且不可以跳过任何一行数据。

3、游标的优点

游标是针对行操作的,对从数据库中SELECT查询得到的结果集的每一行可以进行分开的独立的相同或不同的操作,是一种分离的思想。游标是面向集合与面向行的设计思想之间的一种桥梁。

4、游标的缺点

游标的主要缺点是性能不高。
游标的开销与游标中进行的操作相关,如果在游标中进行复杂的操作,开销会非常高。如果采用面向集合的SQL语句,扫描成本为O(N);但如果采用面向集合的SQL语句的扫描成本为O(N*N),则使用游标有可能会带来性能上的提升。
游标的缺点是只能一行一行操作。在数据量大的情况下,速度过慢。数据库大部分是面对集合的,业务会比较复杂,而游标使用会有死,影响其他的业务操作,不可取。 当数据量大时,使用游标会造成内存不足现象。
它的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。

5、游标的适用场景

mysql数据库中,可以在存储过程、函数、触发器、事件中使用游标。

二、游标的操作

1、游标的定义


DECLARE cursor_name CURSOR FOR select_statement

2、打开游标


OPEN cursor_name;

3、取游标中的数据


FETCH cursor_name INTO var_name [, var_name]...

4、关闭游标


CLOSE cursor_name;

5、释放游标


DEALLOCATE cursor_name;

三、游标实例

1、创建一张游标的测试


CREATE TABLE cursor_table
(
id INT ,
name VARCHAR(10),
age INT
)ENGINE=innoDB DEFAULT CHARSET=utf8;
insert into cursor_table values(1, "孙悟空", 500);
insert into cursor_table values(2, "猪八戒", 200);
insert into cursor_table values(3, "沙悟净", 100);
insert into cursor_table values(4, "唐僧", 20);

使用三种方式使用游标创建一个存储过程,统计年龄大于30的记录的数量。

2、Loop循环


DELIMITER $$ -- mysql默认结束符为;这里选择修改结束符为$$
CREATE  PROCEDURE getTotal()
BEGIN  
    DECLARE total INT; 
    ##创建接收游标数据的变量  
    DECLARE sid INT;  
    DECLARE sname VARCHAR(10);  
    #创建总数变量  
    DECLARE sage INT;  
    #创建结束标志变量  
    DECLARE done INT DEFAULT FALSE;  
    #创建游标  
    DECLARE cur CURSOR FOR SELECT id,NAME,age FROM cursor_table WHERE age>30;  
    #指定游标循环结束时的返回值  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;  
    #设置初始值  
    SET sage = 0;  
    SET total=0;
    #打开游标  
    OPEN cur;  
    #开始循环游标里的数据  
    read_loop:LOOP  
    #根据游标当前指向的一条数据  
    FETCH cur INTO sid,sname,sage;  
    #判断游标的循环是否结束  
    IF done THEN  
        LEAVE read_loop;    #跳出游标循环  
    END IF;  
    #获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,  
    SET total = total + 1;  
    #结束游标循环  
    END LOOP;  
    #关闭游标  
    CLOSE cur;  

    #输出结果  
    SELECT total;  
END$$ -- 存储过程结束
DELIMITER ;-- 重新定义结束符为默认的;

#调用存储过程  
call getTotal();  

结果显示


3

3、While循环


CREATE  PROCEDURE getTotal()
BEGIN  
    DECLARE total INT; 
    ##创建接收游标数据的变量  
    DECLARE sid INT;  
    DECLARE sname VARCHAR(10);  
    #创建总数变量  
    DECLARE sage INT;  
    #创建结束标志变量  
    DECLARE done INT DEFAULT false;  
    #创建游标  
    DECLARE cur CURSOR FOR SELECT id,name,age from cursor_table where age>30;  
    #指定游标循环结束时的返回值  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;   
    SET total = 0;  
    OPEN cur;  
    FETCH cur INTO sid, sname, sage;  
    WHILE(NOT done) 
    DO  
        SET total = total + 1;  
        FETCH cur INTO sid, sname, sage;  
    END WHILE;  

    CLOSE cur;  
    SELECT total;  
END

4、Repeat循环


CREATE getTotal()
BEGIN  
    DECLARE total INT; 
    ##创建接收游标数据的变量  
    DECLARE sid INT;  
    DECLARE sname VARCHAR(10);  
    #创建总数变量  
    DECLARE sage INT;  
    #创建结束标志变量  
    DECLARE done INT DEFAULT false;  
    #创建游标  
    DECLARE cur CURSOR FOR SELECT id,name,age from cursor_table where age > 30;  
    #指定游标循环结束时的返回值  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;   
    SET total = 0;  
    OPEN cur;  
    REPEAT  
    FETCH cur INTO sid, sname, sage;   
    IF NOT done THEN  
        SET total = total + 1;  
    END IF;  
    UNTIL done END REPEAT;  
    CLOSE cur;  
    SELECT total;  
END

5、使用游标数据

第一个例子从游标中检索第一行:


create procedure processorders()
begin
	declare o int;
	
	declare ordernumbers cursor
	for
	select order_num from orders;
	
	open ordernumbers;
	-- 利用fetch检索出第一行的order_num存储到一个名为o的局部变量中。
	fetch ordernumbers into o;
	close ordernumbers;
end;

第二个例子检索游标中的所有行,从第一行到最后一行:


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;
	-- 当done为真(非零)时结束循环。
	repeat
		fetch ordernumbers into o;
	until done end repeat;
	close ordernumbers;
end;

第三个例子对从游标中取出的数据进行某种实际的处理


create procedure processorders()
begin
	declare done boolean default 0;
	declare o int;
	declare t decimal(8,2);
	
	declare ordernumbers cursor
	for
	select order_num from orders;
	
	declare continue handler for sqlstate "02000" set done = 1;
	
	-- 创建一个表用来存放结果
	create table if not exists ordertotals
		(order_num int, total decimal(8,2));
		
	open ordernumbers;
	repeat
		fetch ordernumbers into o;
		-- ordertotal为在上一章创建的一个用来计算带税合计的存储过程
		call ordertotal(o, 1, t);
		insert into ordertotals(order_num, total)
		values(o, t);
	until done end repeat;
	close ordernumbers;
end;
-- 此存储过程不返回数据,但它能创建和填充另一个表。

 

您可能感兴趣的文档:

--结束END--

本文标题: Mysql 游标的简单使用方法

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL游标的嵌套使用方法
    本篇内容主要讲解“MySQL游标的嵌套使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL游标的嵌套使用方法”吧! 前...
    99+
    2024-04-02
  • Vuejs的简单使用方法
    这篇文章主要介绍“Vuejs的简单使用方法”,在日常操作中,相信很多人在Vuejs的简单使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vuejs的简单使用方法”的疑惑...
    99+
    2024-04-02
  • MySQL传输表空间的简单使用方法
    1.目标端创建同样的表结构 CREATE TABLE `test` (       `id` int(11) DEFAULT NULL     ) ENGI...
    99+
    2024-04-02
  • MySQL游标语法的用法
    本篇内容主要讲解“MySQL游标语法的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL游标语法的用法”吧! 1、基本语法:  Sql代码  #定义游...
    99+
    2024-04-02
  • Android简单使用PopupWindow的方法
    本文实例为大家分享了Android简单使用PopupWindow的的具体代码,供大家参考,具体内容如下 思路 1.在res下面创建一个menu文件夹,并新建一个xml文件作为Poup...
    99+
    2024-04-02
  • Qt Designer的简单使用方法
    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用 C++ 代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。 用 ...
    99+
    2024-04-02
  • 详解Oracle游标的简易用法
    下面看下Oracle游标的简易用法,具体代码如下所示: create or replace procedure NW_DelYW(iOPERATION_ID number, ...
    99+
    2024-04-02
  • MySQL关闭SSL的简单方法
    目录mysql关闭SSL方法远程连接MySQL8.0取消SSL验证总结MySQL关闭SSL方法 1、查看是否开启SSL: SHOW VARIABLES LIKE '%ssl%'; 看到have_ssl的值为YES,表示...
    99+
    2023-02-10
    MySQL关闭SSL MySQLSSL MySQL关闭SSL方法
  • mysql和Oracle游标的用法
    本篇内容介绍了“mysql和Oracle游标的用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用游标根...
    99+
    2024-04-02
  • mysql光标的使用方法
    本篇内容介绍了“mysql光标的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明使用光标前,必须声明(定义)。声明后,必须打开游标...
    99+
    2023-06-20
  • SQL游标的原理和使用方法
    这篇文章主要介绍“SQL游标的原理和使用方法”,在日常操作中,相信很多人在SQL游标的原理和使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL游标的原理和使用方法”...
    99+
    2024-04-02
  • sqlserver游标使用的方法是什么
    在SQL Server中,游标是一种用于遍历结果集的数据库对象。使用游标可以逐行处理结果集中的数据。 要使用游标,首先需要定义游标,...
    99+
    2024-04-09
    sqlserver
  • SpringBootAdmin的简单使用的方法步骤
    目录一、快速入门1.1 SpringBoot Admin服务端的搭建1.2 SpringBootAdmin client端搭建1.3 效果展示二、安全性2.1 admin-serve...
    99+
    2024-04-02
  • 详解Navicat简单使用方法
    Navicat是一款用于数据库管理的工具,支持多种数据库系统,如MySQL、Oracle、SQL Server等。下面是Navicat的简单使用方法:1. 下载和安装Navicat:首先,从Navicat官方网站下载适用于你的操作系统的...
    99+
    2023-08-09
    Navicat
  • python调用kubernetesAPI简单使用方法
    前言: K8s也提供API接口,提供这个接口的是管理节点的apiserver组件,apiserver服务负责提供HTTP API,以便用户、其他组件相互通信。客户端库 安装 pip ...
    99+
    2024-04-02
  • registerForActivityResult()方法的简单理解和使用
    最近学到了registerForActivityResult,简单理解一下: 1、使用registerForActivityResult为获取到的结果注册结果回调,但其本身不会启动intent跳转 2...
    99+
    2023-09-05
    android java android studio
  • swiper在vue中的简单使用方法
    本次使用的是 swiper5,swiper 不同版本在使用 的过程会有一些差别 说明:本次示例中 skuImageList 是图片列表,由父组件从服务器获取然后传给这个轮播子组件使...
    99+
    2024-04-02
  • SpringBoot中使用Swagger的超简单方法
    Swagger号称世界上最流行的Api框架,它是RestFul 风格的Api。文档在线自动生成工具:Api文档与API定义同步更新。可以直接运行,能在线测试API接口;支持多种编程语...
    99+
    2024-04-02
  • Android传感器的简单使用方法
    本文实例为大家分享了Android传感器简单使用的具体代码,供大家参考,具体内容如下 1. SensorManager类 SensorManager类用来管理各个传感器:通过Sens...
    99+
    2024-04-02
  • python 进程池的简单使用方法
    回到python,用一下python的进程池。 记得之前面试的时候,面试官问:你知道进程池的默认参数吗? 我没有回答上来,后来才知道,是有默认参数的。下面就看看它的默认参数 1. 不加参数 from multiprocessing.po...
    99+
    2023-01-30
    使用方法 进程 简单
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作