Mysql游标使用 批量插入或更新数据

-- LOOP循环
CREATE PROCEDURE `test`.`new_procedure` ()
BEGIN
-- 需要定义接收游标数据的变量
  DECLARE a CHAR(16);
  -- 游标
  DECLARE cur CURSOR FOR SELECT i FROM test.t;
  -- 遍历数据结束标志
  DECLARE done INT DEFAULT FALSE;
  -- 将结束标志绑定到游标
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  -- 打开游标
  OPEN cur;

  -- 开始循环
  read_loop: LOOP
    -- 提取游标里的数据,这里只有一个,多个的话也一样;
    FETCH cur INTO a;
    -- 声明结束的时候
    IF done THEN
      LEAVE read_loop;
    END IF;
    -- 这里做你想做的循环的事件

    INSERT INTO test.t VALUES (a);

  END LOOP;
  -- 关闭游标
  CLOSE cur;

END;

注:变量的定义不要和你的select的列的键同名!不然,fetch into 会失败!

另外 :

如果没有则插入数据,如果有则更新的方法:

insert into `test` values (a,b) ON DUPLICATE KEY UPDATE `a`=c;
-- while循环
create procedure curdemo()
begin
       declare stop_flag int DEFAULT 0;//声明一个标记,当游标状态为最后一条记录时,修改该变量
	declare id int default 0;
	declare type int default 0;
	declare order1 int default 0;
	declare cur1 cursor for select * from test1;
       declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET stop_flag=1;
       open cur1;//打开游标

       fetch cur1 into id,type,order1;读取数据到游标
       while stop_flag<>1 DO//若游标有下一条记录,循环
	    insert into test2 values(id,type,order1);
           fetch cur1 into id,type,order1;
       end while;
       close cur1;//关闭游标
end;
时间: 2024-10-13 21:29:56

Mysql游标使用 批量插入或更新数据的相关文章

mysql命令行批量插入100条数据命令

先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为";" 如何通过mysql命令行批量插入100条数据呢,可以在代码里实现,也可以通过命令行,也就是通过存储过程: delimiter $$create procedure myproc ()begindeclare num int ;set num = 1 ;while num < 100 d

批量插入或更新数据

/// <summary>        /// 大数据单表批量插入,带事务        /// </summary>        /// <param name="keepID"></param>        /// <param name="tableName"></param>        /// <param name="dt"></para

Java批量插入、更新数据

Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有.今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库. 前台页面: <span style="font-size:14px;"><body class="main_body" scroll="no"> <div class="employee_gun_dong"> <form nam

C#使用SqlDataAdapter 实现数据的批量插入和更新

近日由于项目要求在需要实现中型数据的批量插入和更新,晚上无聊,在网上看到看到这样的一个实现方法,特摘抄过来,以便以后可能用到参考. 一.数据的插入 DateTime begin = DateTime.Now; string connectionString = ......; using(SqlConnection conn = new SqlConnection(connectionString)){ conn.Open(); SqlDataAdapter sd = new SqlDataAd

Asp.net QueryString批量插入和更新

public static string InsertOrUpdateQueryString(string[] keys, string[] values) { return InsertOrUpdateQueryString(System.Web.HttpContext.Current.Request, keys, values); } public static string InsertOrUpdateQueryString(System.Web.HttpRequest request,

SQL语句-批量插入表(表数据插表)

批量插入表(表数据插表) ****1.INSERT INTO SELECT语句语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量.示例如下: 2.SELECT INTO FROM语句语句形式为:SELECT vale1, value2 into Table2 from

java批量插入或更新的问题

在批量插入或者更新中,setXXX的时候字段类型必须一致.例如:在普通sql中 pstmt8.setBigDecimal(j ,xxx);可以写成pstmt8.setString(j,xxx.toString()); 但在批量插入时必须写成pstmt8.setBigDecimal(j,xxx);否则批处理会报提交中至少有一条不成功的问题.折腾一下午,终于搞好了.顺便记下来,方便参考.

Mybatis 批量插入多条数据,使用场景:导入多条数据

Mybatis 批量插入多条数据,使用场景:导入多条数据 接口代码: void batchInsertCapacity(@Param("list")List<Map<String, Object>> metadbmaplist); SQL: <insert id="batchInsertCapacity"> insert into index_prodcut ( ID, ORG_ID, TEXT1, TEXT2, TEXT3, P

MyBatis动态批量插入、更新Mysql数据库的通用实现方案

一.业务背景 由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方,进行批量的插入和更新操作, 关于数据源的切换可以参考之前的文章<spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource.atomikos.JTA实现多数据源灵活切换以及分布式事务管理> 二.批量插入的具体实现 1.查询需要同步的数据: @Aut