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

    注:这里说的svn是eclipse里svn插件 默认情况下,我们在点击svn同步时,总是会把一些不需要的目录和文件也给同步了,这样我觉得很晃眼睛,所以在这里说下怎么去去掉不想同步的文件 1.默认同步下 ...

  2. [采坑] VS2015 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

    问题: Visual Studio 2015出现warning C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失. 解决方案: 1. ...

  3. JS中生成随机数

    1.Math 对象方法: Math.ceil(); //向上取整. Math.floor(); //向下取整. Math.round(); //四舍五入. Math.random(); //0.0 ~ ...

  4. CF1073D Berland Fair 二分+线段树

    考场上切的,挺简单的~ Code: #include <cstdio> #include <algorithm> #define N 200005 #define inf 10 ...

  5. Confluence 6 Office 和 PDF 文件

    插入一个文件到页面中是能够让你将有用的文件,电子表格,幻灯片或者其他可用的文件在你小组中进行分享的好方法. 针对所有的文件类型,你可以选择以链接方式插入一个文件.缩略图将会对文档的内容进行预览同时可以 ...

  6. 【HDOJ5447】Good Numbers(数论)

    题意: 思路:From https://blog.csdn.net/qq_36553623/article/details/76683438 大概就是把1e6里面的质因子能除的都除光之后借助两者gcd ...

  7. [CF666E]Forensic Examination:后缀自动机+线段树合并

    分析 用到了两个小套路: 使用线段树合并维护广义后缀自动机的\(right\)集合. 查询\(S[L,R]\)在\(T\)中的出现次数:给\(T\)建SAM,在上面跑\(S\),跑到\(R\)的时候先 ...

  8. Spring Boot教程(二十六)使用Spring Security安全控制

    准备工作 首先,构建一个简单的Web工程,以用于后续添加安全控制,也可以用之前Chapter3-1-2做为基础工程.若对如何使用Spring Boot构建Web应用,可以先阅读<Spring B ...

  9. R_Studio(学生成绩)绘制频率分布直方图、分布饼图、折线比较图

    对“Gary.csv”中的成绩数据进行分布分析 (1)按0-59,60-69,70-79,80-89,90-100分组绘制高级语言程序设计成绩的频率分布直方图. (2)按0-59,60-69,70-7 ...

  10. C++入门经典-例2.6-简单用cout输出字符

    1:代码如下: // 2.6.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...