MySQL随机字符串函数批量插入数据
简单举个例子:
drop table if exists demo1 create table demo1 ( id int primary key auto_increment, name varchar(50) ) desc demo1 -- 随机字符串函数用于插入数据 drop function if exists rand_str; delimiter // create function rand_str(size int,type int) returns varchar(255) begin declare seed varchar(255) ; declare seed_num varchar(255) default '1234567890'; declare seed_str varchar(255) default 'qwertryuiopasdfghjklzxcvbnm'; declare ret varchar(255) default ''; declare i int default 0; -- 为seed 赋值 首先判断类型需要得到的是数字
-- 还是字符串0为数字 1为字符串
-- 都不是的话那则拼接数字与字符串 concat();
set seed = case type when 0 then seed_num when 1 then seed_str else concat(seed_num,seed_str) end; -- 循环拼接字符串 随机得到的数字之后截取字符串
-- 循环一次则截取一个 条件小于参数size while i < size do set ret = concat(ret, substring(seed, floor(length(seed) * rand() + 1), 1)); set i = i + 1; end while; -- 最后返回 return ret; end // delimiter ; -- 使用存储过程插入批量数据 drop procedure if exists pro_demo; delimiter // create procedure pro_demo( num int ) begin -- 循环语句写法 while end while; repeat .. set autocommit = 0; set @i=0; repeat set @i=@i+1; insert into demo1(name) values(rand_str(7,5)); until @i =num end repeat; if @i % 10000 = 1 then commit; end if; commit; set autocommit = 1; end // delimiter ; -- set @num = 100000; call pro_demo(@num); select * from demo1
这里了解一下存储过程不建议使用
1、难以调试,难以维护
2、业务逻辑跟数据库耦合度过高,不便于迁移
3、对数据的压力过大,需要分拆
4、MySQL 对存储过程的支付有些弱鸡
不忘初心