mysql应用之通过存储过程方式批量插入数据
我们平时的测试过程中有一个环节就是准备测试数据,包括准备基础数据,准备业务数据,使用的场景包括压力测试,后台批量数据传输,前端大数据查询导出,或者分页打印等功能,准备测试数据我们通俗点讲就是造数据,根据不同的使用场景我们有不同的造数据的方式,比如需要大数据时我们可以用jmeter压测获取大数据,也可以导入生产数据,简单少许的测试数据我们直接在数据库中插入,本篇主要记录的是另外一种造数据的方式——通过编写存储过程来实现批量数据插入。
一、编写调用存储过程:
数据库类型:mysql
需求:在user表中插入数据,user表主键为id,id方式为长度为32位的字母+数字随机字符串
1、创建存储过程
1 delimiter $$ 2 use `db_test`$$ 3 drop procedure if exists `proc_user`$$ 4 5 create definer=`root`@`%` procedure `proc_user`() 6 begin 7 declare user_name varchar(60); 8 declare email varchar(150); 9 declare rand_id varchar(120); 10 declare id varchar(120); 11 declare i int default 1000; 12 declare createtime datetime; 13 declare tel_body varchar(40); 14 declare tel varchar(60); 15 -- 调试过程, 先插入5条 16 while i <= 1005 do 17 -- user_name = test + i 18 set user_name = concat('test', i); 19 set email = concat(user_name,'@qq.com'); 20 set rand_id= substring(md5(rand()),1,28); 21 -- id = rand_id + i, +i的目的主要是为了区分测试数据与user_name对应 22 set id = concat(rand_id, i); 23 set createtime = now(); 24 set tel_body = floor(rand()*100000000); 25 -- tel = 159开头随机号码 26 set tel = concat('159', tel_body); 27 28 insert into `user` 29 values(id, 30 user_name, 31 '202cb962ac59075b964b07152d234b70', 32 '0cc495f78776486294ebc7c08831aabe', 33 null, 34 createtime, 35 tel, 36 email 37 ); 38 set i=i+1; 39 end while; 40 end$$
2、调用存储过程
1 call `proc_user`();
3、查看表数据
4、模拟批量插入5000条数据,
1)调用存储过程,全部数据插入完成耗时如下:
2)核对数据库插入数据总量
二、函数简要解释:
1、concat()函数:
拼接函数,将多个字符串拼接成一个字符串,语法为:concat(str1,str2,…)
2、rand()函数,floor()函数:
rand(),0-1之间的随机数,带小数点
floor(),取整;
floor(rand() *10),获得0-10之间的整数(包含0,不包含10);floor(rand() *100000000),获取10000000-99999999之间的随机整数
3、substring()函数:
截取子字符串函数,从特定位置开始的字符串返回一个给定长度的子字符串
语法:substring(字符串,位置,长度),如substring(md5(rand()),1,28),从md5随机字符串的第1位开始截取长度为28位的子字符串
三、其他数据准备的参考文档
jmeter压测获取大数据可参考:
mysql导入大数据量的生产数据可参考: