MySQL上使用存储过程简单造数据(循环插入)

-- 建表
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来自定义插入的内容。

经测试,由于原理还是使用循环插入的形式,想要造一定量级的数据(如百万级或千万级以上),还是比较慢的,但是比使用代码插入肯定快不少。


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍