MySQL游标的使用

  1. 
    
  2. MySQL游标的使用
  3. A simple cursor of mysql
  4. step1:
  5. 新建表tb_test;
  6. create table tb_test(
  7. id int
  8. );
  9. insert into tb_test values (‘1‘);
  10. insert into tb_test values (‘2‘);
  11. insert into tb_test values (‘3‘);
  12. step2:
  13. 声明存储过程sp_test;
  14. delimiter $$
  15. create procedure sp_test()
  16. BEGIN
  17. declare tmp int default 0;
  18. declare sum int default 0;
  19. declare done int default -1;
  20. /* 声明游标 */
  21. declare myCursor cursor for select id from tb_test;
  22. /* 当游标到达尾部时,mysql自动设置done=1 */
  23. declare continue handler for not found set done=1;
  24. /* 打开游标 */
  25. open myCursor;
  26. /* 循环开始 */
  27. myLoop: LOOP
  28. /* 移动游标并赋值 */
  29. fetch myCursor into tmp;
  30. if done = 1 then
  31. leave myLoop;
  32. end if;
  33. /* do something */
  34. set sum = sum + tmp;
  35. /* 循环结束 */
  36. end loop myLoop;
  37. insert into tb_test values(sum);
  38. /* 关闭游标 */
  39. close myCursor;
  40. END
  41. $$
  42. delimiter ;
  43. step3:
  44. call sp_test();
  45. select * from tb_test();
  46. +----+
  47. | id |
  48. +----+
  49. |  1 |
  50. |  2 |
  51. |  3 |
  52. |  6 |
  53. +----+
时间: 2024-11-19 23:14:04

MySQL游标的使用的相关文章

MySQL游标的简单实践

Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行,简单的select语句成批地进行处理,需要在检索出来的行中前进或后退一行或多行--若是想得到其中的每一行进行处理,就必须使用游标. Q:什么是游标? A: 游标(cursor),是一个存储在MySQL服务器上的数据库查询,游标不是一条 SELECT语句,而是被该语句检索出来的结果集:可以看做是指向

MySQL 游标管理

在理解了Oracle上的游标之后,再去翻MySQL中关于游标的说明,发现这块讲得比较简单,用一个例子来说明就能理解MySQL游标的使用方法. 游标的使用分为4步:分别是打开游标(open).游标循环(loop,leave).提取数据(fetch).关闭游标(close). 这里使用了Mysql官方文档(5.5)中的例子: CREATE PROCEDURE curdemo() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE a CHAR(16); DEC

使用mysql 游标,快速删除子节点及其附属节点

上篇,我写的是如何用数据存储,并通过html展示出树形的结构, 本篇我将讲述,如何通过存储过程,删除一个树节点及其附属节点.网上已经有非常多的关于mysql 游标使用的文章了, 为什么我还要写这篇文章呢,主要是想表达一些在软件设计领域的一些想法. 我不赞同在数据库中大量的使用存储过程, 因为我觉得随着软件系统的复杂度逐渐提高,维护的难度会逐渐的增大.而且大批量的使用存储过程,不利于后期通过分布式部署应用程序来解决日益增多的业务需求. 我推荐把存储过程用在处理一些不包含太多业务,批量操作数据的场景

[转]MySQL游标的使用

转自:http://www.cnblogs.com/sk-net/archive/2011/09/07/2170224.html 以下的文章主要介绍的是MySQL游标的使用笔记,其可以用在存储过程的SQL语句,其主要类型主要有以下几种,以下就是对其详细介绍,相信如果你掌握了这项技术,会在以后的学习或是工作中带来很大的帮助. 1. 无返回结果语句,如:INSERT,UPDATE,DROP, DELETE等 2. select语句返回单行变量并可传给本地变量(select ..into) 3. 返回

SqlServer和MySQL游标学习

一 sqlserver游标使用 /*** 游标的使用  讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱.  使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1声明游标 最简单游标声明:DECLARE <游标名>CURSOR FOR<SELECT语句>: 其中select语句可以是简单查询,也可以是复杂的接连查询和嵌套查询 例子: [已表2 AddSalary为例子] Declare mycursor cursor for select *

MySQL游标操作指南

本篇文章是对MySQL游标的具体使用进行了详细的分析介绍,需要的朋友参考下 测试表 level  代码如下: create table test.level (name varchar(20)); 再 insert 些数据 ; 初始化 代码如下: drop procedure if exists useCursor // 建立 存储过程 create 代码如下: CREATE PROCEDURE useCursor() BEGIN 局部变量的定义 declare 代码如下: declare tm

mysql游标的使用 No data - zero rows fetched, selected

转自:http://blog.sina.com.cn/s/blog_544c72960101bvl3.html 这是一个游标的使用例子. 但是其中有几点需要注意,就是为什么要加入 declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname= null;这样的一句话. 如果不加的话将直接报错.No data - zero rows fetched, selected, or processed 另外也有人提示过这样的经验: 经验之谈:在MYS

创建角色随机名字(mysql抽取随机记录)和mysql游标的使用

最近在开发中遇到了一些问题,在此记录一下解决的方法,已作备忘. 1.现在创建游戏角色的时候,基本上都是支持角色名字随机的,以前此功能在客户端用代码实现,然后向服务器请求并验证,后来发现有时候连续几次都失败,所以改成在服务器实现.实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中. 实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过的名字. BEGIN DECLARE randnum int DEFAULT 0; SELECT F

mysql游标中使用临时表

有时候需我们要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题. 所谓临时表:只有在当前连接情况下, TEMPORARY 表才是可见的.当连接关闭时, TEMPORARY 表被自动取消.必须拥有 create temporary table 权限,才能创建临时表.可以通过指定 engine = memory; 来指定创建内存临时表. drop table if exists pre_person