MySQL存储过程,拼接sql批量插入数据

-- 一个简单的存储过程,通过拼接sql批量向数据库插入数据
-- 自定义声明结束符
DELIMITER $$
-- row_num要插入数据的行数,cuser当插入数据用户的id
create procedure randUser(in row_num int, in cuser varchar(32))
begin 
	declare id varchar(32);
	-- 计数器
	declare counter int default 0;
	-- 插入语句的前半部分
	set @pre_sql = "insert into user_info(id,user_id,user_name,create_user) values ";
	set @exec_sql = @pre_sql;
	-- 循环语句
	repeat
		-- 循环拼接每一行数据
		-- 通过uuid和replace函数获取id
		set @exec_sql = concat(@exec_sql,"('",replace(uuid(),'-',''),"','",concat('userid',count+1),"','",concat('username',count+1),"','",cuser,'),");
		set counter=counter+1;
		-- 每拼接1000行数据或者技数器达到上限插入一次
		if counter mod 1000 = 0 or counter >= row_num then
			-- 出除sql最后一个逗号
			set @exec_sql = substring(@exec_sql, 1, char_length(@exec_sql)-1);
			-- 预处理并执行sql
			prepare stmt from @exec_sql;
			execute stmt;
			deallocate prepare stmt;
			-- 为了记录最后一组插入的完整sql
			if counter < row_num then
				set @exec_sql = @pre_sql;
			end if;
		end if;
		-- 直到计数器大于等于插入行数,退出循环
		until counter >= row_num
	end repeat;
end$$
DELIMITER ;
-- 调用存储过程,插入100000条数据
call randUser(100000, 'userid00000');

--查看变量,可以看到最后一组执行的sql
select @exec_sql;

--删除存储过程
drop procedure randUser;
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值