欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql应用之通过存储过程方式批量插入数据

程序员文章站 2022-04-15 13:58:02
我们平时的测试过程中有一个环节就是准备测试数据,包括准备基础数据,准备业务数据,使用的场景包括压力测试,后台批量数据传输,前端大数据查询导出,或者分页打印等功能,准备测试数据我们通俗点讲就是造数据,根据不同的使用场景我们有不同的造数据的方式,比如需要大数据时我们可以用jmeter压测获取大数据,也可 ......

我们平时的测试过程中有一个环节就是准备测试数据,包括准备基础数据,准备业务数据,使用的场景包括压力测试,后台批量数据传输,前端大数据查询导出,或者分页打印等功能,准备测试数据我们通俗点讲就是造数据,根据不同的使用场景我们有不同的造数据的方式,比如需要大数据时我们可以用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、查看表数据

mysql应用之通过存储过程方式批量插入数据

4、模拟批量插入5000条数据,

1)调用存储过程,全部数据插入完成耗时如下:

mysql应用之通过存储过程方式批量插入数据

2)核对数据库插入数据总量

mysql应用之通过存储过程方式批量插入数据

二、函数简要解释: 

1、concat()函数:

     拼接函数,将多个字符串拼接成一个字符串,语法为:concat(str1,str2,…)

2、rand()函数,floor()函数:

     rand(),0-1之间的随机数,带小数点

    mysql应用之通过存储过程方式批量插入数据

     floor(),取整;

     floor(rand() *10),获得0-10之间的整数(包含0,不包含10);floor(rand() *100000000),获取10000000-99999999之间的随机整数

    mysql应用之通过存储过程方式批量插入数据

3、substring()函数:

     截取子字符串函数,从特定位置开始的字符串返回一个给定长度的子字符串

     语法:substring(字符串,位置,长度),如substring(md5(rand()),1,28),从md5随机字符串的第1位开始截取长度为28位的子字符串

三、其他数据准备的参考文档

jmeter压测获取大数据可参考:

mysql导入大数据量的生产数据可参考: