review代码发现,同事mysql批量插入数据的实现方法是,用for循环遍历,将列表每个数据单次插入。相当于批量插入N条数据,进行了n次的数据库连接和插入操作。

底层有批量插入的方法,但是会有问题,所以已经停用,看下面实现是,取到一个数据库连接,来处理后面所有的插入操作。若这个列表ops所有的sql语句执行的数据库都是同一个的话,就没什么问题,若里面存在散库的情况,只要跟第一个不在同一个库的,都会执行失败。

public void insertBatch(Listops) throws SQLException {if(ops != null && ops.size() != 0) {

OpBatchUpdate firstOp= (OpBatchUpdate)ops.get(0);if(firstOp.bizName != null && firstOp.bizName.trim().length() != 0) {

PreparedStatement ps= null;

Connection conn= null;long begin = 0L;try{

begin= this.sqlBegin();

conn= this.getConn('w', firstOp);//取第一个来监理数据库连接

Iterator i$=ops.iterator();while(i$.hasNext()) {

OpBatchUpdate opb=(OpBatchUpdate)i$.next();

ps=conn.prepareStatement(opb.getSql());

opb.setParam(ps);ps.executeUpdate();if(ps != null) {

ps.close();

}

}

}finally{this.closeRSC((ResultSet)null, ps, conn);this.sqlEnd("excutebatch sql,", begin);

}

}else{throw new SQLException("----- the bizName of the first opbatchupdate object can\'t null -------------");

}

}else{throw new SQLException("----- the opbatchupdate list can\'t null -------------");

}

}

对同一个库的同一个表进行批量插入操作。有两种方法:

以表smily_test为例:

CREATE TABLE `smily_test` (

`id`int(11) NOT NULL AUTO_INCREMENT,

`uid`int(11) unsigned NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

1. for循环,将数据一条条插入。

insert into smily_test (uid) values(1);

insert into smily_test (uid) values(2);

insert into smily_test (uid) values(3);

2. 单次批量插入。

insert into smily_test (uid) values(1),(2),(3);

通过profile分析(查看mysql语句运行时间)得知:

方法2比方法1的效率高。

+----------+------------+------------------------------------------------+

| Query_ID | Duration | Query |

+----------+------------+------------------------------------------------+

| 5 | 0.00079800 | insert into smily_test (uid) values(1) |

| 6 | 0.00081300 | insert into smily_test (uid) values(2) |

| 7 | 0.00078700 | insert into smily_test (uid) values(3) |

| 8 | 0.00083200 | insert into smily_test (uid) values(1),(2),(3) |

+----------+------------+------------------------------------------------+

总结:

方法1:执行效率偏低,会进行多次数据库的连接,比较耗时。但是适用于散库、散表的情况。

若数据在不同的库,则只能进行多次数据库连接。

若列表数据要插入同1个库的不同的表中,则可以选择1次数据库连接,多次数据插入执行的方式。

方法2:执行时间短,只适用于对同一个库同一个表批量插入数据的情况。

mysql批量insert into_mysql批量插入数据相关推荐

  1. python向es写入大量数据_使用Python-elasticsearch-bulk批量快速向elasticsearch插入数据_李谦的博客-CSDN博客...

    from elasticsearch import Elasticsearch from elasticsearch import helpers import pymysql import time ...

  2. mysql c api 函数 linux下 mysql_query_Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据...

    标签: Title:Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据 --2013-10-11 11:57 #include #include #in ...

  3. MySQL Workbench 使用MySQL语法“创建表格以及插入数据”

    我们的MySQL Workbench创建表格以及插入数据共有两种方式.一种方式:通过我们自己进行手动创建表格以及插入数据.另一种方式:就是使用我们的MySQL的语法,进行创建表格以及添加数据. 下面的 ...

  4. Mysql之向表中插入数据

    Mysql之向表中插入数据 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...f ...

  5. Mysql创建表结构及插入数据代码

    Mysql创建表结构及插入数据代码 CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(255) ...

  6. Java ibatis批量insert,ibatis批量insert是什么写法?要怎么编写?

    与数据库的交互操作永远是一个框架的评判标准,什么项目都离不开数据库,这次我们来看看ibatis该怎么批量实现insert吧. 在ibatis框架中使用回调接口就可以实现数据的批量操作,减少对数据库的访 ...

  7. mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...

    我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. 但在多线程情况下,就不行了. 下面 ...

  8. MySQL基础——DML语言学习\插入数据\删除数据\更新数据

    接上篇文章 MySQL基础--DDL语言学习 DML语言学习 Data Manipulation Language 数据操纵语言 主要包括表记录的插入(INSERT).更新(UPDATE).删除(DE ...

  9. Mysql 中创建数据库并插入数据

    运行数据库 sudo service mysql startmysql -u root 新建数据库 create database mydatabse_test; 使用数据库 use mydataba ...

最新文章

  1. java 高并发解决方案
  2. 醉酒删库:几杯红酒下肚,7小时数据消失...
  3. python科学计算基础教程pdf下载-Python科学计算基础教程_PDF电子书
  4. 【数字信号处理】相关函数 ( 相关函数性质 | 相关函数共轭对称性质 | 实信号自相关函数偶对称 | 复信号自相关函数共轭对称 | 复信号互相关函数共轭对称 )
  5. 深入浅出Node.js(八):Connect模块解析(之二)静态文件中间件
  6. 记录yarn被攻击的解决办法
  7. C语言满分代码:L1-059 敲笨钟 (20分)
  8. 聊一聊 java8 中的 Optional
  9. Jfinal中Cron4jPlugin使用
  10. 如何编写一个抢购bot_如何编写一个SkyWalking插件
  11. [转]jQuery: how to get which button was clicked upon form submission?
  12. 大型网站系统架构实践(六)深入探讨web应用集群Session保持
  13. office创建数据透视表
  14. 微型计算机公众号,《互联网周刊》编辑推荐的40个微信公众号
  15. Ant Design - Authorized
  16. mellanox在vmware中的切割
  17. Java学习中遇到的中文乱码问题的整理和解决方法
  18. 交互体验之产品的文案
  19. java技术路线思维导图_开题报告中的研究方法及技术路线指的啥?
  20. 大数据时代网络舆情与社会治理研究

热门文章

  1. 总结前端跨域的拦截流程
  2. 总结:Prometheus服务发现机制
  3. python网络爬虫技术 江吉彬下载 pdf_精通Python网络爬虫:核心技术、框架与项目实战 附源码 中文pdf完整版[108MB]...
  4. 前端开发工程师-阿里内推一面
  5. CSAPP——Lab2——Bomb Lab
  6. Git教程1-生存篇
  7. mac电脑安装python_mac电脑怎么安装python
  8. 为AWS EC2实例添加固定IP
  9. npm 报错 ajv-keywords@3.2.0 requires a peer of ajv@^6.0.0
  10. 我们为什么要读书---摘自人民日报