010-MySQL批量插入测试数据
1、由于测试需要
需要将数据插入到百万级别,故需要使用循环语句,循环参看:009-MySQL循环while、repeat、loop使用
方式三、使用values批量插入【【推荐答案】】
基础格式
INSERT INTO test_table (modelid, modelname, `desc`)
VALUES
(1, CONCAT('name', 1), 'desc1'),
(2, CONCAT('name', 2), 'desc2');
接下来主要是sql语句的拼装,
delimiter // #定义标识符为双斜杠
DROP PROCEDURE IF EXISTS my_procedure ; #如果存在 my_procedure 存储过程则删除
CREATE PROCEDURE my_procedure () #创建无参存储过程
BEGIN
DECLARE n INT DEFAULT 1 ; # 申明变量
set @execSql='insert into test_table (modelid,modelname,`desc`) values';
set @execdata = ''; WHILE n <= 10001 DO
set @execdata=concat(@execdata,"(",n,",","'name",n,"',","'desc'",")"); if n%1000=0
then
set @execSql = concat(@execSql,@execdata,";");
#select @execSql;
prepare stmt from @execSql;
execute stmt;
DEALLOCATE prepare stmt;
commit; set @execSql='insert into test_table (modelid,modelname,`desc`) values';
set @execdata = '';
ELSE
set @execdata = concat(@execdata,',');
end if; SET n = n + 1 ; #循环一次,i加一
END WHILE ; #结束while循环
#select count(*) from test_table;
END
//
delimiter ;
call my_procedure(); #调用存储过程
DROP PROCEDURE IF EXISTS my_procedure ; #如果存在 my_procedure 存储过程则删除
调用执行后,查看下执行时间
call my_procedure() OK, Time: 0.18sec
方式一、直接循环单条插入1W条【不推荐】
delimiter // #定义标识符为双斜杠
DROP PROCEDURE IF EXISTS my_procedure ; #如果存在 my_procedure 存储过程则删除
CREATE PROCEDURE my_procedure () #创建无参存储过程
BEGIN
DECLARE n INT DEFAULT 1 ; #申明变量
WHILE n <= 10000 DO
#结束循环的条件:
insert into test_table (modelid,modelname,`desc`)
value (n,CONCAT('name',n),'desc');
SET n = n + 1 ; #循环一次,i加一
END WHILE ; #结束while循环
#select count(*) from test_table;
END
//
delimiter ;
call my_procedure(); #调用存储过程
DROP PROCEDURE IF EXISTS my_procedure ; #如果存在 my_procedure 存储过程则删除
可以执行成功,但是比较耗时,
call my_procedure() OK, Time: 27.55sec
方式二、每1000天增加一次commit事务提交【不推荐】
delimiter // #定义标识符为双斜杠
DROP PROCEDURE IF EXISTS my_procedure ; #如果存在 my_procedure 存储过程则删除
CREATE PROCEDURE my_procedure () #创建无参存储过程
BEGIN
DECLARE n INT DEFAULT 1 ; #申明变量
WHILE n <= 10000 DO
#结束循环的条件:
insert into test_table (modelid,modelname,`desc`)
value (n,CONCAT('name',n),'desc');
SET n = n + 1 ; #循环一次,i加一
if n%1000 =0
THEN
COMMIT;
end if;
END WHILE ; #结束while循环
#select count(*) from test_table;
END
//
delimiter ;
call my_procedure(); #调用存储过程
DROP PROCEDURE IF EXISTS my_procedure ; #如果存在 my_procedure 存储过程则删除
可以执行成功,结果是比较耗时
call my_procedure() OK, Time: 27.49sec
结论与上述一致
010-MySQL批量插入测试数据的更多相关文章
- mysql批量插入测试数据
一.建表语句 use test; create table student( Sno ) NOT NULL COMMENT '学号', Sname ) NOT NULL COMMENT '姓名', S ...
- mysql批量插入简单测试数据
mysql批量插入简单测试数据 # 参考网址: https://www.2cto.com/database/201703/618280.html 1.mysql创建测试表 CREATE TABLE ` ...
- Oracle/Mysql批量插入的sql,效率比较高
1.oracle 批量插入: insert into tableName(col1,col2,col3...) select 1,'第一行第一列值','第二列值' from dual union ...
- MySQL 批量插入值
MySQL 批量插入值 今天遇到个问题,需要从类似以下语句中的各个小括号[其实也有中括号等]抽取相关字段进行组合[相关规则,此处略去不提],并保存到数据库中,此时如果每次插入一条,会连续进行多次插入, ...
- mybatis + mysql 批量插入、删除、更新
mybatis + mysql 批量插入.删除.更新 Student 表结构 批量插入 public int insertBatchStudent(List<Student> studen ...
- mybatis+mysql批量插入和批量更新、存在及更新
mybatis+mysql批量插入和批量更新 一.批量插入 批量插入数据使用的sql语句是: insert into table (字段一,字段二,字段三) values(xx,xx,xx),(oo, ...
- mybatis oracle mysql 批量插入时的坑爹问题--需谨记
mybatis oracle mysql 批量插入一.oracle的批量插入方式insert into db(id, zgbh, shbzh) select '1', '2', '3' from du ...
- MYSQL批量插入数据库实现语句性能分析
假定我们的表结构如下 代码如下 CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value ...
- MYSQL批量插入数据库实现语句性能分析【转】 批量插入!程序里面对于数据库插入的功能尽量用【异步处理+批量插入+(事务)】
假定我们的表结构如下 代码如下 CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VA ...
- MySQL 批量插入 Update时Replace
建一张试验表如下: 一.批量插入 MySQL的INSERT有一种写法如下: INSERT INTO person VALUES (NULL,'关羽', '2016-04-22 10:00:00'), ...
随机推荐
- Python 3.6 版本-使用Pytesseract 模块进行图像验证码识别
环境: (1) win7 64位 (2) Idea (3) python 3.6 (4) pip install pillow < >pip install pytesse ...
- A quick introduction to Google test
视频参考:Google C++ Testing GTest GMock Framework 为什么要使用 Google C++ Testing Framework? 使用这个框架有许多好理由.本文讨论 ...
- python 列表的属性和方法整理
list属性和方法 补一个超实用的函数 envmerate(列表名, [start=0]) 作用: 将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用 ...
- CVE-2019-0193:Apache Solr 远程命令执行漏洞复现
0x00 漏洞背景 2019年8月1日,Apache Solr官方发布了CVE-2019-0193漏洞预警,漏洞危害评级为严重 0x01 影响范围 Apache Solr < 8.2.0 0x0 ...
- python_常用断言assert
python自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断. 常用 这里介绍几个常用断言的使用方法 ...
- Echo团队Alpha冲刺 - 总结随笔
班级:软件工程1916|W 作业:项目Alpha冲刺(团队) 团队名称:Echo 作业目标:完成项目Alpha冲刺 评审表:腾讯文档 Alpha冲刺随笔集合 目录 团队博客汇总 项目预期计划及完成情况 ...
- 07. vue-router嵌套路由
嵌套路由用法 1.嵌套路由功能分析 点击父级路由链接显示模板内容 模板内容中又有子级路由链接 点击子级路由链接显示子级模板内容 2.父路由组件模板 父级路由链接 父组件路由填充位 <p> ...
- bShare分享插件|自定义分享按钮|异步加载分享解决办法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C++中的常量指针和指针常量
1.概述: const Type * pointer;常量指针(const在*之前,与类型的位置无要求),所指向的地址上的数据是常量,而指向的地址可以变化. Type * const pointer: ...
- 使用Ajax实现三级联动
首先准备数据库只有一张表 分析数据库根据 parentid来查 jsp代码 servlet代码 <%-- Created by IntelliJ IDEA. User: 60590 Date: ...