我们平时的测试过程中有一个环节就是准备测试数据,包括准备基础数据,准备业务数据,使用的场景包括压力测试,后台批量数据传输,前端大数据查询导出,或者分页打印等功能,准备测试数据我们通俗点讲就是造数据,根据不同的使用场景我们有不同的造数据的方式,比如需要大数据时我们可以用jmeter压测获取大数据,也可以导入生产数据,简单少许的测试数据我们直接在数据库中插入,本篇主要记录的是另外一种造数据的方式——通过编写存储过程来实现批量数据插入。

一、编写调用存储过程:

数据库类型:mysql

需求:在user表中插入数据,user表主键为id,id方式为长度为32位的字母+数字随机字符串

1、创建存储过程

 DELIMITER $$
USE `db_test`$$
DROP PROCEDURE IF EXISTS `proc_user`$$ CREATE DEFINER=`root`@`%` PROCEDURE `proc_user`()
BEGIN
DECLARE user_name VARCHAR(60);
DECLARE email VARCHAR(150);
DECLARE rand_id VARCHAR(120);
DECLARE id VARCHAR(120);
DECLARE i INT DEFAULT 1000;
DECLARE createtime DATETIME;
DECLARE tel_body VARCHAR(40);
DECLARE tel VARCHAR(60);
-- 调试过程, 先插入5条
WHILE i <= 1005 DO
-- user_name = test + i
SET user_name = CONCAT('test', i);
SET email = CONCAT(user_name,'@qq.com');
SET rand_id= SUBSTRING(MD5(RAND()),1,28);
-- id = rand_id + i, +i的目的主要是为了区分测试数据与user_name对应
SET id = CONCAT(rand_id, i);
SET createtime = NOW();
SET tel_body = FLOOR(RAND()*100000000);
-- tel = 159开头随机号码
SET tel = CONCAT('', tel_body); INSERT INTO `user`
VALUES(id,
user_name,
'202cb962ac59075b964b07152d234b70',
'0cc495f78776486294ebc7c08831aabe',
NULL,
createtime,
tel,
email
);
SET i=i+1;
END WHILE;
END$$

2、调用存储过程

 CALL `proc_user`();

3、查看表数据

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

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

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

二、上述方法是将插入记录数作为一个固定值,直接写在存储过程中,其实还可以设置参数,调用存储过程时传递需要插入的记录行数,如下:

 -- 传参数的方法
DELIMITER $$
USE `db_test`$$
DROP PROCEDURE IF EXISTS `proc_user`$$ CREATE DEFINER=`root`@`%` PROCEDURE `proc_user`(IN cn INT(4))
BEGIN
DECLARE user_name VARCHAR(60);
DECLARE email VARCHAR(150);
DECLARE rand_id VARCHAR(120);
DECLARE id VARCHAR(120);
DECLARE i INT DEFAULT 1000;
DECLARE createtime DATETIME;
DECLARE tel_body VARCHAR(40);
DECLARE tel VARCHAR(60);
-- 判定条件,i<=cn则插入
WHILE i <= cn DO
SET user_name = CONCAT('test', i);
SET email = CONCAT(user_name,'@qq.com');
SET rand_id= SUBSTRING(MD5(RAND()),1,28);
SET id = CONCAT(rand_id, i);
SET createtime = NOW();
SET tel_body = FLOOR(RAND()*100000000);
SET tel = CONCAT('', tel_body); INSERT INTO `user`
VALUES(id,
user_name,
'202cb962ac59075b964b07152d234b70',
'0cc495f78776486294ebc7c08831aabe',
NULL,
createtime,
tel,
email
);
SET i=i+1;
END WHILE;
END$$ -- 传参数的方法CALL `proc_user`(cn); -- cn为任意大于1000小于9999的数值
CALL `proc_user`(1100);

三、函数简要解释:

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位的子字符串

mysql应用之通过存储过程方式批量插入数据的更多相关文章

  1. MySQL高级知识(十)——批量插入数据脚本

    前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( ...

  2. 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

    领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...

  3. elasticsearch REST API方式批量插入数据

    elasticsearch REST API方式批量插入数据 1:ES的服务地址  http://127.0.0.1:9600/_bulk 2:请求的数据体,注意数据的最后一行记得加换行 { &quo ...

  4. mybatis oracle两种方式批量插入数据

    mybatis oracle两种方式批量插入数据 注意insert,一定要添加: useGeneratedKeys="false" ,否者会报错. <insert id=&q ...

  5. mybatis注解方式批量插入数据

    @Insert("<script>" + "INSERT INTO cms_portal_menu(name,service_type,index_code) ...

  6. mybatis 注解写法 多层嵌套foreach,调用存储过程,批量插入数据

    @Select("<script>" + "DECLARE @edi_Invoice_Details edi_Invoice_Details;" + ...

  7. mysql应用存储过程批量插入数据

    --批量插入数据的sql语句 delimiter $$ DROP PROCEDURE IF EXISTS `test.sp_insert_batch` $$ CREATE DEFINER =`root ...

  8. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

  9. C#批量插入数据到Sqlserver中的三种方式

    本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生 成 ...

随机推荐

  1. jmeter测试报告添加报告生成日期时间

    <!-- Defined parameters (overrideable) --><xsl:param name="showData" select=" ...

  2. Visual Studio 2008:路径设置

    造冰箱的大熊猫,本文适用于Visual Studio 2008中文版@cnblogs 2018/11/30 1.头文件路径设置 如果头文件所在路径未在环境变量中定义,编译时会出现C1083错误,提示无 ...

  3. Make文件(一)

    基本规则: 目标:依赖 (tab)规则 目标:需要生成的目标文件 依赖:生成该目标所需的一些文件 规则:由依赖文件生成目标文件的手段 tab:每条规则前必须以tab开头,使用空格不行. 例如: /** ...

  4. JS Module

    JS Module Summary I. Why we need to use the Module? In the past, Javascript can execute independentl ...

  5. Keil工程Lib库文件的制作和运用

    最近看了百度手环开源项目,发现所有的算法都被封装成了一个lib文件在keil中调用 也是第一次学习到. 问题引出:为什么要做成lib库? 1.有些方案公司为了将自己写的关键部分源代码不进行公开,但是同 ...

  6. Apicloud_(项目)网上书城01_前端搭建

    [本文皆在记录自己开发Apicloud项目过程,不具备教学水平性文章] 参考书籍<30天App开发从0到1> Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud ...

  7. input(移动端iOS)输入内容时调用软件盘后页面底部留白问题

    iOS/input输入框调用软键盘底部留白 只需input输入框失去焦点时,让页面自动下移即可恢复 <input placeholder="请输入用户名" v-model=& ...

  8. 【Spark机器学习速成宝典】模型篇08保序回归【Isotonic Regression】(Python版)

    目录 保序回归原理 保序回归代码(Spark Python) 保序回归原理 待续... 返回目录 保序回归代码(Spark Python) 代码里数据:https://pan.baidu.com/s/ ...

  9. 如何在DELL R420上部署EXSI虚拟化(服务器上的安装)

    <VMware ESXi>是一款虚拟化软件.软件支持windows平台客户端界面管理,客户端界面与正常使用的虚拟机WMware Workstation界面功能类似VMware ESXI 服 ...

  10. python出现AttributeError: module ‘xxx’ has no attribute ‘xxx’错误时,两个解决办法

    运行python程序时,也许会出现这样的错误:AttributeError: module ‘xxx’ has no attribute ‘xxx’: 解决该错误有两种方法 1.手动安装该模块 2.检 ...