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;

版权声明:本文为qq_29550537原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。