mysql批量insert into_mysql批量插入数据
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批量插入数据相关推荐
- python向es写入大量数据_使用Python-elasticsearch-bulk批量快速向elasticsearch插入数据_李谦的博客-CSDN博客...
from elasticsearch import Elasticsearch from elasticsearch import helpers import pymysql import time ...
- 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 ...
- MySQL Workbench 使用MySQL语法“创建表格以及插入数据”
我们的MySQL Workbench创建表格以及插入数据共有两种方式.一种方式:通过我们自己进行手动创建表格以及插入数据.另一种方式:就是使用我们的MySQL的语法,进行创建表格以及添加数据. 下面的 ...
- Mysql之向表中插入数据
Mysql之向表中插入数据 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...f ...
- Mysql创建表结构及插入数据代码
Mysql创建表结构及插入数据代码 CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(255) ...
- Java ibatis批量insert,ibatis批量insert是什么写法?要怎么编写?
与数据库的交互操作永远是一个框架的评判标准,什么项目都离不开数据库,这次我们来看看ibatis该怎么批量实现insert吧. 在ibatis框架中使用回调接口就可以实现数据的批量操作,减少对数据库的访 ...
- mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...
我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. 但在多线程情况下,就不行了. 下面 ...
- MySQL基础——DML语言学习\插入数据\删除数据\更新数据
接上篇文章 MySQL基础--DDL语言学习 DML语言学习 Data Manipulation Language 数据操纵语言 主要包括表记录的插入(INSERT).更新(UPDATE).删除(DE ...
- Mysql 中创建数据库并插入数据
运行数据库 sudo service mysql startmysql -u root 新建数据库 create database mydatabse_test; 使用数据库 use mydataba ...
最新文章
- java 高并发解决方案
- 醉酒删库:几杯红酒下肚,7小时数据消失...
- python科学计算基础教程pdf下载-Python科学计算基础教程_PDF电子书
- 【数字信号处理】相关函数 ( 相关函数性质 | 相关函数共轭对称性质 | 实信号自相关函数偶对称 | 复信号自相关函数共轭对称 | 复信号互相关函数共轭对称 )
- 深入浅出Node.js(八):Connect模块解析(之二)静态文件中间件
- 记录yarn被攻击的解决办法
- C语言满分代码:L1-059 敲笨钟 (20分)
- 聊一聊 java8 中的 Optional
- Jfinal中Cron4jPlugin使用
- 如何编写一个抢购bot_如何编写一个SkyWalking插件
- [转]jQuery: how to get which button was clicked upon form submission?
- 大型网站系统架构实践(六)深入探讨web应用集群Session保持
- office创建数据透视表
- 微型计算机公众号,《互联网周刊》编辑推荐的40个微信公众号
- Ant Design - Authorized
- mellanox在vmware中的切割
- Java学习中遇到的中文乱码问题的整理和解决方法
- 交互体验之产品的文案
- java技术路线思维导图_开题报告中的研究方法及技术路线指的啥?
- 大数据时代网络舆情与社会治理研究
热门文章
- 总结前端跨域的拦截流程
- 总结:Prometheus服务发现机制
- python网络爬虫技术 江吉彬下载 pdf_精通Python网络爬虫:核心技术、框架与项目实战 附源码 中文pdf完整版[108MB]...
- 前端开发工程师-阿里内推一面
- CSAPP——Lab2——Bomb Lab
- Git教程1-生存篇
- mac电脑安装python_mac电脑怎么安装python
- 为AWS EC2实例添加固定IP
- npm 报错 ajv-keywords@3.2.0 requires a peer of ajv@^6.0.0
- 我们为什么要读书---摘自人民日报