MySQL 游标(cursor)简单应用

MySQL存储过程不可以定义动态的游标(cursor),但是可以使用变量。open -> fetch...into -> close。

1、声明一个游标:

-- define userId
DECLARE userId nvarchar(50) default 0;
-- define CURSOR
DECLARE mycur CURSOR FOR select id from user; 
-- declare cur stop flag (sql error -> stopCur=1)
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET stopCur=1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopCur=1;

2、open,执行 fetch 循环

-- open CURSOR
OPEN cur;
-- Execute only once
FETCH cur INTO userId;
WHILE stopCur<>1 DO
    BLOCKA:BEGIN
       set insertsql=‘‘;
       set insertsql=concat(‘insert into newUser(id,name,age) select id,name,age from user where id="‘+userId+‘"‘); 
       set @sqlinsert=insertSql;
       prepare stmtinsert from @sqlinsert;
       execute stmtinsert;
    END BLOCKA;
    -- Execute i-1 times  
    fetch cur into userId;
END WHILE 
CLOSE cur;
时间: 2024-07-31 14:34:39

MySQL 游标(cursor)简单应用的相关文章

MySQL游标的简单实践

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

MySQL游标(cursor) 定义及使用

概念 游标(Cursor)它使用户可逐行访问由SQL?Server返回的结果集.?使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合. 游标机制允许用户在SQL?server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录. 优点 1.允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作. 2.提供对基于游

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游标示例 mysql游标简易教程

从mysql V5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎.InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键),灾难恢复能力等等. 现在简单总结一下游标的知识. (一),认识游标(cursor) 就是一个可读的标识,用来标识数据取到什么地方了. (二),游标特性 1,只读 2,不滚动 3,不敏感的 (三),使用游标 需要强调的是,游标必须在定义处理程序之前被定义,但变量必须在定义游标之前被定义,顺序就是变量定义-游标定义-处理程

SqlServer和MySQL游标学习

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

mysql游标示例mysql游标简易教程

从mysqlV5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎.InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键),灾难恢复能力等等. 现在简单总结一下游标的知识. (一),认识游标(cursor) 就是一个可读的标识,用来标识数据取到什么地方了. (二),游标特性 1,只读 2,不滚动 3,不敏感的 (三),使用游标 需要强调的是,游标必须在定义处理程序之前被定义,但变量必须在定义游标之前被定义,顺序就是变量定义-游标定义-处理程序

python基于mysql实现的简单队列以及跨进程锁

在我们做多进程应用开发的过程中,难免会遇到多个进程访问同一个资源(临界资源)的状况,必须通过加一个全局性的锁,来实现资源的同步访问(同一时间只能有一个进程访问资源). 举个例子: 假设我们用mysql来实现一个任务队列,实现的过程如下: 1. 在Mysql中创建Job表,用于储存队列任务,如下: create table jobs( id auto_increment not null primary key, message text not null, job_status not null

MySQL游标的使用

MySQL游标的使用 A simple cursor of mysql step1: 新建表tb_test; create table tb_test( id int ); insert into tb_test values ('1'); insert into tb_test values ('2'); insert into tb_test values ('3'); step2: 声明存储过程sp_test; delimiter $$ create procedure sp_test()

利用navicat创建存储过程、触发器和使用游标的简单实例

创建存储过程和触发器 1.建表 首先先建两张表(users表和number表),具体设计如下图: 2.存储过程 写一个存储过程,往users表中插入数据,创建过程如下: 代码如下: BEGIN     #Routine body goes here...     declare n bigint;     set n = 201121029684;     while n <= 201121029694     do         insert into users(student_ID) v