-- 一个简单的存储过程,通过拼接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版权协议,转载请附上原文出处链接和本声明。