在一家新公司(架构可能会改变)中,我有一个表,偶尔会从解析的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)....
担心:
2)使用MySqlBulkLoader
担心:
DESCRIBE tablename
将给出正确的顺序)。由于该公司是新的,并且表结构已经改变了。我不想忘记更新代码并使我的数据完整性受到损害。非常感谢任何帮助。
答案 0 :(得分:0)
一种选择是使用LOAD DATA INFILE和REPLACE语法。 REPLACE语法将使用输入行替换现有行,以用于对现有行中的主键或唯一索引具有相同值的行
示例:
LOAD DATA INFILE '/tmp/your_data.csv' REPLACE
INTO TABLE your_table (column1, column2, ...)
正如您所说,您的数据库架构将经常更改。您可以从配置中读取列的列表。这样,当数据库模式发生变化时,您就不必更改代码。