Mysql游标使用 批量插入或更新数据
博客专区 > Lemon_C 的博客 > 博客详情
Mysql游标使用 批量插入或更新数据
Lemon_C 发表于3年前
Mysql游标使用 批量插入或更新数据
  • 发表于 3年前
  • 阅读 1560
  • 收藏 3
  • 点赞 1
  • 评论 3

腾讯云 技术升级10大核心产品年终让利>>>   

-- 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;



共有 人打赏支持
粉丝 34
博文 55
码字总数 47373
评论 (3)
潜心修炼呀
这是批量么。。
Lemon_C

引用来自“潜心修炼呀”的评论

这是批量么。。
倒影年华
需要commit?
×
Lemon_C
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: