MySQL存储过程游标实现分批COMMIT

MySQL存储过程分批COMMIT

海量数据分批提交

DROP PROCEDURE IF EXISTS proc_role;
CREATE PROCEDURE proc_role ( )
BEGIN
	DECLARE done int DEFAULT FALSE;
	DECLARE v_cnt int DEFAULT 0;
	DECLARE v_rolename varchar(32);
	DECLARE cur1 CURSOR for SELECT vrolename from tt;
	/* 定义退出循环规则 */
	DECLARE CONTINUE HANDLER for not found set done=TRUE;
	/* 开启事务,即关闭MySQL自动提交 */
	SET autocommit = 0;
	
	OPEN cur1;
	read_loop:loop
		FETCH cur1 INTO v_rolename;
		IF
			done THEN
				LEAVE read_loop;			
		END IF;
		/* 开始计数 */
		SET v_cnt = v_cnt + 1;				
		insert into role(rolename) VALUES(v_rolename);		 
	/* 下面是每1000条记录提交一次,可以根据业务情况调整 */
			 if
			 mod(v_cnt,1000)=0 then 
/*			 SELECT SLEEP(5);	断点检测*/
	commit; END if;	
	END LOOP;
	CLOSE cur1;	
/* 因为整除1000之后还有最后一批数据未提交,所以再进行一次COMMIT */
	COMMIT;
END;

各位技术牛好!这个存储过程虽然实现了分批提交,但是感觉效率有些低,是不是还有优化的空间,望不吝赐教,谢谢!

  • 3
    点赞
  • 4
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值