如何利用存储过程造数据

事件背景:

         某产品里有一项营销活动,活动概述一句话就是用户参与某项抽奖活动。在后台管理系统会记录并且能导出抽中奖品用户提交的地址信息数据,目前每期活动每次能导出的数据量最多是2万条。有一次产品提出一个需求,要求把2万条数据放开至10万条,以防大量用户参与导致导出数据不全。

         那么,问题来了,这10万条数据如何造?用什么工具?作为一名测试工程师,造数据是必备技能,这事不能造开发来造。想出了两个方法:一个是利用jmeter或者loadrunner写个脚本,让他运行,这个虽然行的通,但是费时费力。二是利用存储过程来造数据,存储过程造数据速度快,再加上之前我在上家公司熟悉过,所以选择了用存储过程。存储过程虽然比第一种方法快,但是大师数据情况下,也是挺慢的,但日常测试存储过程就够用了。

总体过程:

1、  查看要插入数据的表,是否有主键约束和自增

2、  看表里的字段类型

3、  看表里的字段是否可以为空

4、  编辑存储过程并执行

5、  完成

具体过程:

一、查看要插入数据的表,是否有主键约束。

一般有主键约束的都是自增的,目的是在插入数据时,不会重复,一般这样的字段在造数据时不需要过多的关注。只关注其它的字段即可。

有两种方法:

1、  在数据库-选中表-右键-设计表

2、  在数据库-选中表-右键-设计表-对象信息-DDL- 查看哪个字段有AUTO_INCREMENT属性

方法1图示:

方法2图示:


二、看表里的字段类型&看表里的字段是否可以为空

这个同具体过程一,不同的是,看DDL信息时,看哪些是int类型,哪些是varchar类型,方便造数据时输入相应类型的数据。查看字段是否为只是看哪些字段是not null,如果是not null,那么这个字段必须有数据。我这里除了主键是非空以外,其它都可以是null,但为了更好的识别,有些关键信息都给加上了。

三、编辑存储过程并执行

drop procedure if exists t_add; -- 如果存在t_add 存储过程则删除

create procedure t_add(num int)

begin

declare i int;   -- 定义一个int类型的i

set i=0;

while i<num do

INSERT IGNORE INTO `smsp_member_send_record_summary` (`CREATE_DTTM`,`REWARD_ID`,`PRODUCT_TYPE`,

`PRODUCT_CODE`,`ORDER_ID`,`ACT_ID`,`PRODUCT_NUM` ,`USER_NAME`,`SEND_STATUS`,`SERIAL_NO` ,

`PRODUCT_ID`,`ADDRESS`,`SEND_FLAG`,`CONTACT_NAME`,`CONTACT_TEL`,`UPDATE_DTTM`,`ID_CARD`)

VALUES ('2019-03-22 09:27:35',i,4,'2194','HY52017','Y127003',1,'1_c202f4e74f553a16v29@PPTV',1,'2019032214510700102306639395',

100012059,'asasasas',1,'ceshi','13212341234','2019-09-23 16:00:23','211321199006122323');

set i=i+1;

end while; 

end;  -- 结束整个存储过程

call t_add(100001); -- 调用存储过程,插入10万条数据

注意:

1、  在造数据的过程中,如果是大量的数据,也是很慢的,10万条数据的话,大概需要1分钟左右。执行过程中select count*) 是变化的,不要以为结果不是10万就是失败了呢。

2、  如果插入数据时,提示数据库里已有数据,重复了,可以在insert后面加个ignore 忽略,数据库会自动跳过该条数据并继续。

标签: Mysql

演示站
上一篇:python学习笔记(三):文件操作和集合
下一篇:已是最新文章

发表评论