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

探讨了使用MySQL存储过程实现海量数据分批提交的方法,通过每1000条记录进行一次COMMIT操作,以减少锁等待时间和提高写入效率。但作者认为仍有优化空间,邀请社区共同讨论。

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

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;

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

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值