聊聊编程开发的数据库批量插入(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 

附录文件导入

数据库语句驱动说明
oraclesqlldr dbuser/dbpass@dbservice control=users.ctl默认 
mysqlLOAD DATA LOCAL INFILE '/var/lib/mysql/pet.txt' INTO TABLE tbl_pet默认 
postgresqlCOPY mytable FROM '/myfile.csv'  WITH CSV  HEADER默认 
sqlserver

BULK

  INSERT Employee

  FROM 'F:\\MyPublis\\TestToInsert.txt' --location with filename

  WITH

  (

  FIELDTERMINATOR = ',',

  ROWTERMINATOR = '\n'

  )

默认 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值