使用存储过程,批量创建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);
然后就可以根据测试工作需要随时补充创造新数据了!