-- 建表
drop table if exists `t_user`;
create table `t_user` (
`id` bigint(20) not null auto_increment comment '主键id',
`name` varchar(32) not null default '' comment '姓名',
`phone` varchar(32) not null default '' comment '手机',
`amount` decimal(10, 2) not null default '0' comment '余额',
primary key (`id`)
) engine=InnoDB comment='用户表';
-- 删除存储过程(如果存在的话)
drop procedure if exists fakedata;
-- 修改mysql分隔符为双分号
delimiter $$
-- 定义存储过程函数
create procedure fakedata(IN times INT)
begin
declare i int;
set i=1;
while i<=times do
-- 插入一条数据
insert into t_user(
`name`,
`phone`,
`amount`
)
values(
left(concat('小明',uuid()),32),
floor(10000000000+rand()*10000000000),
round(rand()*1000, 2)
);
set i=i+1;
end while;
end$$
-- 恢复mysql分隔符为单分号
delimiter ;
-- 调用存储过程
call fakedata(10000);
-- 查询下插入条数
select count(*) from t_user;
执行sql脚本即可,如遇到报错,可尝试按照空行分割,一条一条执行。
具体逻辑参考注释,可以通过修改“插入一条数据”这里的sql来自定义插入的内容。
经测试,由于原理还是使用循环插入的形式,想要造一定量级的数据(如百万级或千万级以上),还是比较慢的,但是比使用代码插入肯定快不少。