C Sharp MysqlBulkInsert vs Muplitple Insert Query

时间:2014-11-06 03:02:11

标签: c# mysql bulkinsert bulkloader

在一家新公司(架构可能会改变)中,我有一个表,偶尔会从解析的csv文件中接收批量插入(10k - 200k行,可能包含重复项)。对此最好的方法是什么?

目前我执行以下操作:Insert Into table (Fields) Values (Values) ON DUPLICATE KEY UPDATE Set <Primary Key> = <Primary Key>,这需要太长时间,特别是当要插入的记录数量增加时。

我知道的两个选项是

1)INSERT INTO table (Fields) VALUES (Values),(Values),(Values)....

担心:

  • Paramaterizaion,我是否必须声明数千个命令参数以避免sql注入?
  • 重复密钥,有没有办法避免在混合中添加重复主键时命令失败

2)使用MySqlBulkLoader

担心:

  • 列映射:根据我的阅读,需要使用与表中相同顺序的字段生成csv(假设一个简单的DESCRIBE tablename将给出正确的顺序)。由于该公司是新的,并且表结构已经改变了。我不想忘记更新代码并使我的数据完整性受到损害。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

一种选择是使用LOAD DATA INFILE和REPLACE语法。 REPLACE语法将使用输入行替换现有行,以用于对现有行中的主键或唯一索引具有相同值的行

示例:

LOAD DATA INFILE '/tmp/your_data.csv' REPLACE 
INTO TABLE your_table (column1, column2, ...)

正如您所说,您的数据库架构将经常更改。您可以从配置中读取列的列表。这样,当数据库模式发生变化时,您就不必更改代码。