创建游标:

首先在MySql中创建一张数据表:

CREATE TABLE IF NOT EXISTS `store` (  

`id` int(11) NOT NULL AUTO_INCREMENT,  

`name` varchar(20) NOT NULL,  

`count` int(11) NOT NULL DEFAULT '1',

 PRIMARY KEY (`id`)   

ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7; 

INSERT INTO `store` (`id`, `name`, `count`) VALUES  

(1, 'android', 15),  

(2, 'iphone', 14),  

(3, 'iphone', 20),  

(4, 'android', 5),  

(5, 'android', 13),  

(6, 'iphone', 13)
我们现在要用存储过程做一个功能,统计iphone的总库存是多少,并把总数输出到控制台。

--在windows系统中写存储过程时,如果需要使用declare声明变量,需要添加这个关键字,否则会报错。  

delimiter // 

drop procedure if exists StatisticStore; 

CREATE PROCEDURE StatisticStore()   

BEGIN 

--创建接收游标数据的变量 

declare c int; 

declare n varchar(20); 

--创建总数变量 

declare total int default 0; 

--创建结束标志变量 

declare done int default false; 

--创建游标 

declare cur cursor for select name,count from store where name = 'iphone'; 

--指定游标循环结束时的返回值 

declare continue HANDLER for not found set done = true; 

--设置初始值 

set total = 0; 

--打开游标 

open cur; 

--开始循环游标里的数据 

read_loop:loop 

--根据游标当前指向的一条数据 

fetch cur into n,c; 

--判断游标的循环是否结束 

if done then 

leave read_loop;    --跳出游标循环 

end if; 

--获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作, 

set total = total + c; 

--结束游标循环 

end loop; 

--关闭游标 

close cur; 

--输出结果 

select total; 

END; 

-调用存储过程 

call StatisticStore();

fetch是获取游标当前指向的数据行,并将指针指向下一行,当游标已经指向最后一行时继续执行会造成游标溢出。
使用loop循环游标时,他本身是不会监控是否到最后一条数据了,像下面代码这种写法,就会造成死循环;

read_loop:loop  

fetch cur into n,c;  

set total = total+c;  

end loop; 

在MySql中,造成游标溢出时会引发mysql预定义的NOT FOUND错误,所以在上面使用下面的代码指定了当引发not found错误时定义一个continue 的事件,指定这个事件发生时修改done变量的值。
declare continue HANDLER for not found set done = true; 
所以在循环时加上了下面这句代码。

--判断游标的循环是否结束  

if done then  

leave read_loop;    --跳出游标循环 

end if;

如果done的值是true,就结束循环。继续执行下面的代码。
 
 
 
 

Mysql 游标的定义与使用方式的更多相关文章

  1. MySQL游标(cursor) 定义及使用

    概念 游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集. 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据后,结果 ...

  2. MySql 游标定义时使用临时表

    参考:Re: Temp Table in Select of a Cursor 方法一: delimiter $$ create procedure test_temp() begin drop te ...

  3. SqlServer和MySQL游标学习

    一 sqlserver游标使用 /*** 游标的使用  讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱.  使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1 ...

  4. Mysql 游标初识

    MySql 游标初识 认识 游标(cursor), 按字面意思可理解为, 游动的标识, 或者叫做"光标", 这样更容易理解. 就好比现有一张表存储了n行记录, 然后我想每次取出一行 ...

  5. MySQL游标操作指南

    本篇文章是对MySQL游标的具体使用进行了详细的分析介绍,需要的朋友参考下   测试表 level  代码如下: create table test.level (name varchar(20)); ...

  6. MySQL游标的简单实践

    Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行 ...

  7. mysql 游标 demo

    一.MySQL游标的概念 1.游标介绍 MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想 ...

  8. [转]MySQL游标的使用

    转自:http://www.cnblogs.com/sk-net/archive/2011/09/07/2170224.html 以下的文章主要介绍的是MySQL游标的使用笔记,其可以用在存储过程的S ...

  9. MySQL数据库备份的4种方式

    MySQL备份的4种方式 总结: 备份方法 备份速度 恢复速度 便捷性 功能 一般用于 cp 快 快 一般.灵活性低 很弱 少量数据备份 mysqldump 慢 慢 一般.可无视存储引擎的差异 一般 ...

随机推荐

  1. C# 中窗口AutoScaleMode属性

    C# 窗体中有一个AutoScaleMode 这个属性,我们大家可能用的比较少. 它的作用是:当屏幕分辨率或字体发生改变时,窗体和控件是如何发生变化的.

  2. java 英文笔记

    JDBC涉及到的单词 Driver 驱动器 DriverManager (Manager 处理者,经理,管理人; 干事,理事; 〈美〉(政党等的)领袖; 策士,干才,干练的人;) create Sta ...

  3. 零点起飞学HTML+CSS (顼宇峰) PDF扫描版

    零点起飞学HTML+CSS系统地介绍了网站制作中各种常用的HTML标签和CSS属性,以及网站各个部分和各种布局的实现方法,还提供了大量实例来引导读者学习,力求让读者获得真正实用的知识.本书涉及面广,从 ...

  4. linux手动安装配置 mysql5.7

    本文原出处地址  https://www.cnblogs.com/mujingyu/p/7689116.html 一.安装前的检查 1.1 检查 linux 系统版本 [root@localhost ...

  5. spring aop实现权限管理

    问题源于项目开发 最近项目中需要做一个权限管理模块,按照之前同事的做法是在controller层的每个接口调用之前上做逻辑判断,这样做也没有不妥,但是代码重复率太高,而且是体力劳动,so,便有了如题所 ...

  6. Django之后台管理二

    前面讲到admin界面用户的注册以及修改,如果我们注册的用户密码忘记了该怎么办呢 在终端输入如下的命令进行重置 D:\django_test2>python manage.py shell Py ...

  7. git 命令总结(转)

    结构图: <1> Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库   # 在当前目录新建 ...

  8. 【bzoj4939】【YNOI2016】掉进兔子洞(莫队)

    题目描述 您正在打galgame,然后突然发现您今天太颓了,于是想写个数据结构题练练手: 一个长为 n 的序列 a. 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个 ...

  9. LAMP之Mysql源码配置安装

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RD ...

  10. CF862B Mahmoud and Ehab and the bipartiteness 二分图染色判定

    \(\color{#0066ff}{题目描述}\) 给出n个点,n-1条边,求再最多再添加多少边使得二分图的性质成立 \(\color{#0066ff}{输入格式}\) The first line ...