使用存储过程,批量创建MySQL数据

在测试工作中,免不了要做一些压力测试或者性能测试,可测试环境没有那么多数据,手工添加又很慢,怎么办?

使用存储过程呀,大致方法案例如下:

1、创建数据表;

CREATE TABLE `testscore`  (
  `name` varchar(255)  DEFAULT NULL,
  `subject` varchar(255)  DEFAULT NULL,
  `score` int(255) NULL DEFAULT NULL
) ENGINE = InnoDB;

测试表 testscore 一共3列,姓名、科目、分数;

2、创建存储过程

create  procedure `add_data_1000`()
begin
    declare i int default 0;
    while i<1000 do
        insert into testscore  values (
          concat('陈', floor(i / 3)),
          (case i % 3 when 0 then '数学' when 1 then '语文' else '物理' end), 
          floor(rand() * 100));
        set i=i+1;
    end while;
end

  

备注:

CONCAT 可以把多个内容拼接成一个字符串;这里是想为每个人创建3门课的成绩,也就是3条数据。
FLOOR 是取整数部分;
CASE WHEN 是条件判断,不同的条件取不同的值,这里是按除以3的余数来确定科目;
RAND是去0-1的随机数,乘100后,就是取0-100的随机数,但因为都是小数,想要整数则需要FLOOR取整;
SET i=i+1 这句很重要,确保每次循环i的值变大,否则永远无法超过1000,成为了死循环。

3、执行存储过程

CALL add_data_1000

附记:

如果想生成任意多条数据,可以增加两个输入变量 :起始值 startValue,结束值 endValue

create procedure `add_data`(in startvalue int, in endvalue int)
begin
    while startvalue < endvalue do
        insert into testscore  values (
          concat('陈', floor(startvalue / 3)), 
            (case startvalue % 3 when 0 then '数学' when 1 then '语文' else '物理' end), 
            floor(rand() * 100));
        set startvalue=startvalue+1;
    end while;
end

  

 

这时候执行存储过程的方法就改为

CALL add_data(11,20);

然后就可以根据测试工作需要随时补充创造新数据了!

posted @ 2020-10-19 09:35  路上有莉  阅读(352)  评论(0)    收藏  举报