mysql应用之通过存储过程方式批量插入数据
我们平时的测试过程中有一个环节就是准备测试数据,包括准备基础数据,准备业务数据,使用的场景包括压力测试,后台批量数据传输,前端大数据查询导出,或者分页打印等功能,准备测试数据我们通俗点讲就是造数据,根据不同的使用场景我们有不同的造数据的方式,比如需要大数据时我们可以用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,
);
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,
);
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应用之通过存储过程方式批量插入数据的更多相关文章
- MySQL高级知识(十)——批量插入数据脚本
前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( ...
- 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...
- elasticsearch REST API方式批量插入数据
elasticsearch REST API方式批量插入数据 1:ES的服务地址 http://127.0.0.1:9600/_bulk 2:请求的数据体,注意数据的最后一行记得加换行 { &quo ...
- mybatis oracle两种方式批量插入数据
mybatis oracle两种方式批量插入数据 注意insert,一定要添加: useGeneratedKeys="false" ,否者会报错. <insert id=&q ...
- mybatis注解方式批量插入数据
@Insert("<script>" + "INSERT INTO cms_portal_menu(name,service_type,index_code) ...
- mybatis 注解写法 多层嵌套foreach,调用存储过程,批量插入数据
@Select("<script>" + "DECLARE @edi_Invoice_Details edi_Invoice_Details;" + ...
- mysql应用存储过程批量插入数据
--批量插入数据的sql语句 delimiter $$ DROP PROCEDURE IF EXISTS `test.sp_insert_batch` $$ CREATE DEFINER =`root ...
- C#批量插入数据到Sqlserver中的四种方式
我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...
- C#批量插入数据到Sqlserver中的三种方式
本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生 成 ...
随机推荐
- jmeter测试报告添加报告生成日期时间
<!-- Defined parameters (overrideable) --><xsl:param name="showData" select=" ...
- Visual Studio 2008:路径设置
造冰箱的大熊猫,本文适用于Visual Studio 2008中文版@cnblogs 2018/11/30 1.头文件路径设置 如果头文件所在路径未在环境变量中定义,编译时会出现C1083错误,提示无 ...
- Make文件(一)
基本规则: 目标:依赖 (tab)规则 目标:需要生成的目标文件 依赖:生成该目标所需的一些文件 规则:由依赖文件生成目标文件的手段 tab:每条规则前必须以tab开头,使用空格不行. 例如: /** ...
- JS Module
JS Module Summary I. Why we need to use the Module? In the past, Javascript can execute independentl ...
- Keil工程Lib库文件的制作和运用
最近看了百度手环开源项目,发现所有的算法都被封装成了一个lib文件在keil中调用 也是第一次学习到. 问题引出:为什么要做成lib库? 1.有些方案公司为了将自己写的关键部分源代码不进行公开,但是同 ...
- Apicloud_(项目)网上书城01_前端搭建
[本文皆在记录自己开发Apicloud项目过程,不具备教学水平性文章] 参考书籍<30天App开发从0到1> Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud ...
- input(移动端iOS)输入内容时调用软件盘后页面底部留白问题
iOS/input输入框调用软键盘底部留白 只需input输入框失去焦点时,让页面自动下移即可恢复 <input placeholder="请输入用户名" v-model=& ...
- 【Spark机器学习速成宝典】模型篇08保序回归【Isotonic Regression】(Python版)
目录 保序回归原理 保序回归代码(Spark Python) 保序回归原理 待续... 返回目录 保序回归代码(Spark Python) 代码里数据:https://pan.baidu.com/s/ ...
- 如何在DELL R420上部署EXSI虚拟化(服务器上的安装)
<VMware ESXi>是一款虚拟化软件.软件支持windows平台客户端界面管理,客户端界面与正常使用的虚拟机WMware Workstation界面功能类似VMware ESXI 服 ...
- python出现AttributeError: module ‘xxx’ has no attribute ‘xxx’错误时,两个解决办法
运行python程序时,也许会出现这样的错误:AttributeError: module ‘xxx’ has no attribute ‘xxx’: 解决该错误有两种方法 1.手动安装该模块 2.检 ...