聊聊编程开发的数据库批量插入(sql)
这里的批量插入,主要是支持SQL的大型存储数据库,本文以Mysql,Oracle,SqlServer,postgresql4类来说明,这大概是国内应用比较多的了。其余的应该可以按照这些去找。提到编程的话,主要是指c#.当然我不是dba,是程序员,所以说的是编程开发的手段而不是dba的手段。也希望大家留言比较。
先说说我们常用的几种方法,我就不列举代码了。网上都有,大家可以自己试试。
1.事务
开启一个事务,将多条语句执行,然后提交。有的数据库限制sql个数1000.
2.多值插入语法
insert into table(字段) values(字段值),(字段值).
这种语法也是一种批量插入,经过数据库(驱动)的优化.
但是sqlserver是个特殊,它的语法是insert all
insert all into table (字段) values(字段值)
insert table (字段) values(字段值)
insert table (字段) values(字段值)
3.专门的批量处理类
一般数据库都有一个批量类处理,我查看了几个例子,都是把datatable直接写入了。
一般类名称中带有Bulk字样。也是优化过的
4.文件导入
很多数据库支持csv,就单独以csv格式文件为准吧。
数据库提供有自己的办法,就当前说的几类数据库都有。
oracle是特殊的,其它几种都是命令行,可以用执行SQL的方式执行。但是oracle是工具命令行,也就是专门的一个工具来支持(工具是sqlldr ),所以oracle需要完整的客户端支持,至少是包含sqlldr.exe的客户端。oracle使用编程操作时,需要用bat文件或者启动sqlldr.exe方式来操作。
5.参数化
直接SQL参数化,参数化时设置行数。参数值采用数组,但是每个字段的值素组长度必须一样,比如一次插入1000行,每个素组必须是1000长度。我知道oracle是支持的,其它数据库未知,所以要自己尝试,可能不通用。
只给大家提供一个思路,就不一一说明了。至于这几种的处理速度,我就没有发言的了,我没有测试。希望大家留言给我答案。
尤其是第5种方法,我长期使用oracle,其余几种没有,也不打算弄一堆数据库测试,靠大家努力吧。
基于编程开发处理,上面不管哪种方法,都是在自己的数据库访问层或者ORM框架中,就不多说了。可以留言。
如果还有其它批量处理的方式,或者大家对几种方式的速度有比较和测试,或者有其它数据库其它的处理方式,请留言,我们一起讨论研究下。
附录转换处理类
| 数据库 | 驱动 | 名称 | 说明 |
| oracle |
Oracle.DataAccess |
OracleBulkCopy |
|
| mysql | 默认 | MySqlBulkLoader | |
| postgresql | 默认 | 没有直接的类。数据库连接类中有一个方法BeginBinaryImport | 网上有一个扩展bulk |
| sqlserver | 默认 | SqlBulkCopy |
附录文件导入
| 数据库 | 语句 | 驱动 | 说明 |
| oracle | sqlldr dbuser/dbpass@dbservice control=users.ctl | 默认 | |
| mysql | LOAD DATA LOCAL INFILE '/var/lib/mysql/pet.txt' INTO TABLE tbl_pet | 默认 | |
| postgresql | COPY mytable FROM '/myfile.csv' WITH CSV HEADER | 默认 | |
| sqlserver |
BULK INSERT Employee FROM 'F:\\MyPublis\\TestToInsert.txt' --location with filename WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) |
默认 |
聊聊编程开发的数据库批量插入(sql)的更多相关文章
- SQL:数据库批量插入数据
测试中有些功能要求有足够的数据进行测试,当输入字段较多时通过页面添加很慢.业务只关联单个数据库表可以通过数据库批量插入数据 批量插入数据示例: declare @i int--声明变量 --变量初始化 ...
- C# 数据库批量插入数据之 —— SqlBulkCopy、表值参数
创建了一个用来测试的Student表: CREATE TABLE [dbo].[Student]( [ID] [int] PRIMARY KEY NOT NULL, ) NULL, ) NULL, [ ...
- Python批量插入SQL Server数据库
因为要做性能测试,需要大量造数据到数据库中,于是用python写了点代码去实现,批量插入,一共四张表 简单粗暴地插入10万条数据 import pymssql import random __auth ...
- MySQL、Oracle批量插入SQL的通用写法
举个例子: 现在要批量新增User对象到数据库USER表中 public class User{ //姓名 private String name; //年龄 private Integer age; ...
- SqlBulkCopy高效能批量插入SQL SERVER
what SqlBulkCopy是.NET提供的用来批量插入数据的一个类,特别是将内存中的数据一次性插入到数据库,目前只能插入到SQL SERVER数据库,数据源可以是DataTable.IDataR ...
- (转)批量插入sql语句
为了减少数据库连接的I/O开销,一般会把多条数据插入放在一条SQL语句中一次执行.1.INSERT INTO TABLE(col1, col2) VALUES(val11, val12), (val2 ...
- ASP.NET(C#) 使用 SqlBulkCopy 实现批量插入SQL(快捷简单)
业务需要,系统在处理数据时,每暂存一列数据将他插入到右侧的表格中,再执行批量保存,如图所示: //以前的做法可能是生成一堆 insert into xx values xxx 的sql语句,在程序中去 ...
- MYSQL开发性能研究——批量插入的优化措施
一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1); 很显然,在MYSQL中,这样的方 ...
- oracle的批量插入sql
insert into persons (id_p, lastname , firstName, city ) values (200,'haha' , 'deng' , 'shenzhen'), ( ...
随机推荐
- MPU/SoC/Application Processor/Embedded OS
Everything has its principles and mechanisms which are designed by its creator and followed by its u ...
- Android画廊效果
Android画廊效果 前言:Gallery是一个内部元素控件,可以水平滚动,并且可以把当前选择的子元素定位在它中心的布局组件:画廊Gallery一般用来显示可左右移动图片的列表(具体请看实例). 效 ...
- No value specified for 'Date'错误
今天使用 BeanUtils.copyProperties(m,n); 遇到 No value specified for 'Date' 这个错误,以前用的时候都不需要加 try 今天使用发现需 ...
- windows 下 openssl 生成RSA私钥公钥以及PKCS8
生成RSA私钥 打开bin文件夹下面的openssl.exe,输入genrsa -out rsa_private_key.pem 1024 把RSA私钥转换成PKCS8格式 输入命令pkcs8 -to ...
- sqldataAdapter/dataset/datatable的使用
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Loa ...
- “小小科技女神”与微软DigiGirlz Day的约会
上周五在微软中国上海科技园举行的微软科技女生夏令营终于在一天“忙碌的轻松中”,伴随着师生和工程师们的欢笑结束了. 本次的微软科技女生夏令营一共有来自上海闵行区七宝中学.莘庄中学和闵行中学的共50名高中 ...
- .net core系列之《将.net core应用部署到Ubuntu》
1.首先准备一个演示项目. 2.然后将这个项目用FileZilla工具上传到Ubuntu中. 3.进入目标文件,接下来有两种方法来部署项目 a.用dotnet run命令 root@hhz-virtu ...
- [翻译] CHAnimation
CHAnimation https://github.com/cyndibaby905/CHAnimation How it looks CHAnimation is a project used t ...
- MySQL 数据库--索引原理与慢查询优化
索引的原理 本质都是:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据. 索引的数据结构 b+ ...
- 沉淀,再出发:结合案例看python
沉淀,再出发:结合案例看python 一.前言 关于python,如果不经过大型程序开发的洗礼,我们很难说自己已经懂得了python了,因此,我们需要通过稍微结构化的编程来学习python. 二.一个 ...