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批量插入测试数据的更多相关文章

  1. mysql批量插入测试数据

    一.建表语句 use test; create table student( Sno ) NOT NULL COMMENT '学号', Sname ) NOT NULL COMMENT '姓名', S ...

  2. mysql批量插入简单测试数据

    mysql批量插入简单测试数据 # 参考网址: https://www.2cto.com/database/201703/618280.html 1.mysql创建测试表 CREATE TABLE ` ...

  3. Oracle/Mysql批量插入的sql,效率比较高

    1.oracle 批量插入: insert into tableName(col1,col2,col3...)    select 1,'第一行第一列值','第二列值' from dual union ...

  4. MySQL 批量插入值

    MySQL 批量插入值 今天遇到个问题,需要从类似以下语句中的各个小括号[其实也有中括号等]抽取相关字段进行组合[相关规则,此处略去不提],并保存到数据库中,此时如果每次插入一条,会连续进行多次插入, ...

  5. mybatis + mysql 批量插入、删除、更新

    mybatis + mysql 批量插入.删除.更新 Student 表结构 批量插入 public int insertBatchStudent(List<Student> studen ...

  6. mybatis+mysql批量插入和批量更新、存在及更新

    mybatis+mysql批量插入和批量更新 一.批量插入 批量插入数据使用的sql语句是: insert into table (字段一,字段二,字段三) values(xx,xx,xx),(oo, ...

  7. mybatis oracle mysql 批量插入时的坑爹问题--需谨记

    mybatis oracle mysql 批量插入一.oracle的批量插入方式insert into db(id, zgbh, shbzh) select '1', '2', '3' from du ...

  8. MYSQL批量插入数据库实现语句性能分析

    假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value ...

  9. MYSQL批量插入数据库实现语句性能分析【转】 批量插入!程序里面对于数据库插入的功能尽量用【异步处理+批量插入+(事务)】

    假定我们的表结构如下 代码如下   CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VA ...

  10. MySQL 批量插入 Update时Replace

    建一张试验表如下: 一.批量插入 MySQL的INSERT有一种写法如下: INSERT INTO person VALUES (NULL,'关羽', '2016-04-22 10:00:00'), ...

随机推荐

  1. python的map和reduce函数

    map函数时python的高级内置函数 语法为:map(function, iterable, ...) 参数:function -- 函数iterable -- 一个或多个序列 将function作 ...

  2. Python入门篇-递归函数Recursion

    Python入门篇-递归函数(recursion) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.递归概述 (1)函数直接或者间接调用自身就是递归: (2)递归需要有边界,递归 ...

  3. An exception has occurred, use %tb to see the full traceback.----parser.parse_args()报错

    一.报错: 原因: 由于在jupyter notebook中,args不为空. 二.问题解决 改成args = parser.parse_args(args=[])

  4. Xms Xmx PermSize MaxPermSize的含义

    参数的含义 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -vmargs 说明后面是VM的参数,所以后面的其实都是JV ...

  5. MyBatis框架的基本要素-核心接口和类的作用范围

    通过上面运行案例-查询用户表中的记录数. 非集成环境下的最佳作用域范围: SqlSessionFactoryBuilder 用过即丢,推荐作用域在方法体内. SqlSessionFactory 最佳作 ...

  6. Build Post Office

    Description Given a 2D grid, each cell is either an house 1 or empty 0 (the number zero, one), find ...

  7. [Go] Slices vs Array

    It is recommended to use 'slice' over 'Array'. An array variable denotes the entire array; it is not ...

  8. 数论--扩展欧几里得exgcd

    算法思想 我们想求得一组\(x,y\)使得 \(ax+by = \gcd(a,b)\) 根据 \(\gcd(a,b) = \gcd(b,a\bmod b)\) 如果我们现在有\(x',y'\) 使得 ...

  9. learning java Encoder and Decoder

    import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.CharacterCodingExcep ...

  10. NOI 2019 游记

    day -1 去报了个到,顺便买了一大堆衣服. 感觉学校饭堂不太行. day 0 上午是开幕式,. 下午是笔试,顺利获得 \(100\) 分. day 1 先看题. 第一题看到 \(At^2+Bt+C ...