游标是什么??

游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句所检索出来的结果集。

使用游标

在介绍如何创建游标之前,先说明下如何使用游标。

使用游标涉及几个明确的步骤。

1、在能够使用游标前,必须先定义它。这个过程实际上是没有检索数据的,它只是定义要使用的select语句。

2、一旦你定义了游标后,必须打开游标以供使用。这个过程用前面定义的select语句把数据实际检索出来。即这个步骤之后,我们就可以操作游标中的数据了。

3、对于有数据的游标,根据需要取出各行的数据来进行一定的操作。

4、使用完游标后,一定要关闭游标。

创建游标

创建一个游标的语法如下:

用declare 来定义,具体如下:

上面是定义游标的一般形式,当我们定义了一个游标之后,我们就可以来打开它、使用它、关闭它。

打开游标:

open cursor_name;

关闭游标:

close cursor_name;

使用游标:

使用游标用fetch来取出数据,例如:fetch cursor_name in variable;//取出游标所指示的数据给局部变量variable

下面这个例子就是演示了创建一个游标,打开游标及关闭游标,但没有对游标所指示的数据进行数据。

实例:操作游标中的数据

需求是这样,我们手上有一个student2表,表中的结构和数据如下:

现在我们需要将student2表中所有学生的的平均成绩(mathScore+englishScore的一半)合成一行,用逗号’,’隔开。

对于这样一个需求,下面我们尝试用游标来实现。

1 DELIMITER $$2

3 CREATE

4 PROCEDURE`test`.`procedure_student2`()5 BEGIN

6 --declare some variable,必须在声明游标和句柄之前,而声明句柄必须在声明游标之后。

7 DECLARE val DOUBLE DEFAULT 0;8 DECLARE tempRes VARCHAR(10) DEFAULT '';9 DECLARE res VARCHAR(100) DEFAULT '';10 --declare a cursor

11 DECLARE cursor_avgScore CURSOR

12 FOR

13 SELECT (mathScore+englishScore)/2 AS student_avgScore FROMstudent2;14 --declare a continue handler ,use finish while loop

15 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET val= -1.0;16 --open cursor

17 OPENcursor_avgScore ;18 FETCH cursor_avgScore INTOval;19 --fetch cursor

20 WHILE val!=-1DO21 SET tempRes=CONCAT(val,',');22 SET res=CONCAT(res,tempRes);23 FETCH cursor_avgScore INTOval;24 END WHILE;25 --close cursor

26 CLOSEcursor_avgScore ;27 --显示结果

28 SELECTres;29 END$$30

31 DELIMITER ;

调用此存储过程

CALL procedure_student2();

运行结果如下:

上面这个是利用了while循环来一个一个的获取游标中的数据,在MySQL中我们还可以用repeat来做。

1 DELIMITER $$2

3 CREATE

4 PROCEDURE`test`.`procedure_student_v1`()5 BEGIN

6 --declare some variable,必须在声明游标和句柄之前,而声明句柄必须在声明游标之后。

7 DECLARE val DOUBLE DEFAULT 0;8 DECLARE tempRes VARCHAR(10) DEFAULT '';9 DECLARE res VARCHAR(100) DEFAULT '';10 --declare a cursor

11 DECLARE cursor_avgScore CURSOR

12 FOR

13 SELECT (mathScore+englishScore)/2 AS student_avgScore FROMstudent2;14 --declare a continue handler ,use finish while loop

15 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET val= -1.0;16 --open cursor

17 OPENcursor_avgScore ;18 --fetch cursor

19 REPEAT20 FETCH cursor_avgScore INTOval;21 IF val!=-1 THEN

22 SET tempRes=CONCAT(val,',');23 SET res=CONCAT(res,tempRes);24 END IF;25 UNTIL val=-1 END REPEAT; --居然MySQL中 用 val=-1 来结束循环,原以为应该和java、c类似,用val==-1来结束。

26 --close cursor

27 CLOSEcursor_avgScore ;28 --显示结果

29 SELECTres;30 END$$31

32 DELIMITER ;

转自:http://blog.csdn.net/u010412719/article/details/51125496

mysql 定义游标_mysql 游标的使用相关推荐

  1. 什么是mysql的游标_MySQL游标概念是什么 MySQL游标概念与用法介绍

    本篇文章小编给大家分享一下MySQL游标概念与用法介绍,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接 ...

  2. mysql c 游标_mysql游标示例 mysql游标简易教程

    从mysql V5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎.InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键),灾难恢复能力等等. ...

  3. mysql游标_MySQL游标概念与用法详解

    本文实例讲述了MySQL游标概念与用法.分享给大家供大家参考,具体如下: 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行.如果开发过安卓 ...

  4. mysql while 游标_mysql 游标 loop while 的使用

    项目需求:对表进行重新构建,这个用java的缺点是数据的传送以及遍历的话会消耗更多的资源,因此使用mysql的存储过程进行构建. 具体要求:跳过原本设置的假期和课程本身的假期对数据进行重排. 1.游标 ...

  5. mysql游标_MySQL 游标的使用

    MySQL 游标 游标的特性 不敏感:数据库可以选择不复制结果集 只读 不滚动:游标只能向一方向前进,并且不可以跳过任何一行数据 游标的优点 游标是针对行操作的,对从数据库中 select 查询得到的 ...

  6. mysql 定义存储过程_mysql——定义——存储过程和函数——概念

    存储过程和函数是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当作一个整体存储在服务器中 一.创建存储过程 语法格式: create procedure sp_name ( [ proc_ ...

  7. mysql定义结束_mysql自定义开始结束日,以周为维度

    下午网上找了3个小时,就是没有找到一个合适的. 需求:以周为维度,自定义开始结束日期,比如从周五开始,周四结束,计算数据. SELECT FROM_DAYS(TO_DAYS(gmt_create) - ...

  8. mysql定义语言_MySQL基础(一)--数据定义语言DDL

    一.数据库的创建.修改和删除 1.创建数据库 create database [if not exists] 数据库名[ character set 字符集名]; 2.修改数据库 alter data ...

  9. mysql begin end 用法_MySQL ------ 游标(CURSOR)(二十六)

    MySQL执行检索操作会返回一组称为结果集的行,这组返回的行都是与SQL 语句相匹配的行(零行或多行),但是,使用简单的select 语句,没有办法得到第一行.下一行.或前十行,也不存在一行地处理所有 ...

  10. mysql游标的用法及作用_Mysql 游标的用法及其作用

    mysql 游标的用法和作用,话不多说,这个是网上看到的例子,简答粗暴. 例子: 当前有三张表a.b.c其中a和b是一对多关系,b和c是一对多关系,现在需要将b中a表的主键存到c中: 常规思路就是将b ...

最新文章

  1. poj 3740 Easy Finding
  2. 有没有办法检查`null`和`undefined`?
  3. 笔记本电脑投屏到电视_Thinkpad笔记本PC无线连接电视或投影机,性能稳定的商用投屏解决方案...
  4. Failed to bind properties under ‘logging.level‘ to java.util.Map java.lang.String, java.lang.String
  5. bin/...的访问被拒绝被拒绝的问题
  6. Taro+react开发(38)注意请求接口的/
  7. 【转】Magento2目录结构
  8. 红橙Darren视频笔记 CoordinatorLayout:实现自定义behavior
  9. 使用C语言在windows下一口气打开一批网页
  10. php备份网站程序,使用PHP备份整个网站
  11. Hibernate-02-核心配置文件Hibernate.cfg.xml
  12. 2021-05-06
  13. 锐捷交换机忘记密码解决方案:恢复出厂设置、重置配置文件
  14. 99乘法表带颜色HTML隔行变色,javascript小实例,实现99乘法表及隔行变色
  15. Hyperic HQ简介
  16. okhttp https ip直连设置Host
  17. PEM文件和private.key文件生成Tomcat服务器所需的jks文件(配置SSL用)
  18. 五招祛痘法让熟女远离痘痘 - 健康程序员,至尚生活!
  19. 【IIS音频传输】1、认识IIS
  20. 分享Python简短代码,实现TXT转换MySQL文件。

热门文章

  1. idea中maven找不到本地仓库jar包_有人说 Maven 很简单,我却被 伤害 过
  2. python读取dat文件写入表格_python DDT读取excel测试数据
  3. CComboBoxEx 扩展组合框
  4. pdf reference官方指南之-语法基础和文件结构
  5. 图解Web服务器网关接口WSGI(Web Server Gateway Interface)
  6. linux下jdk1.8搭建笔记
  7. OpenCasCade中一个V3d_Viewer对应多个AIS_InteractiveContext的使用
  8. 一般的病毒通过注册表自启动的方式不断完善中。。。。
  9. SAP 独立系统的传输请求
  10. 163Editor 编辑器概览