当前位置: 首页 > 面试题库 >

具有ON DUPLICATE键更新的MySQL LOAD DATA INFILE

宋成天
2023-03-14
问题内容

为了将大量数据加载到MySQL中,LOAD DATA
INFILE
是迄今为止最快的选择。不幸的是,尽管可以通过INSERT IGNORE或REPLACE的方式使用它,但当前不支持ON DUPLICATE
KEY UPDATE。

但是,ON DUPLICATE KEY UPDATE具有的优势REPLACE。当存在重复项时,后者执行删除和插入操作。这带来了密钥管理的开销。另外,自动增量编号在替换时不会保持不变。

ON DUPLICATE KEY UPDATE使用LOAD DATA INFILE时如何模拟?


问题答案:

这些步骤可用于模拟此功能:

1)创建一个新的临时表。

CREATE TEMPORARY TABLE temporary_table LIKE target_table;

2)(可选)从临时表中删除所有索引,以加快处理速度。

SHOW INDEX FROM temporary_table;
DROP INDEX `PRIMARY` ON temporary_table;
DROP INDEX `some_other_index` ON temporary_table;

3)将CSV加载到临时表中

LOAD DATA INFILE 'your_file.csv'
INTO TABLE temporary_table
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(field1, field2);

4)使用ON DUPLICATE KEY UPDATE复制数据

SHOW COLUMNS FROM target_table;
INSERT INTO target_table
SELECT * FROM temporary_table
ON DUPLICATE KEY UPDATE field1 = VALUES(field1), field2 = VALUES(field2);

5)删除临时表

DROP TEMPORARY TABLE temporary_table;

对于任何给定的表,使用SHOW INDEX FROMSHOW COLUMNS FROM此过程都可以自动化。



 类似资料:
  • 问题内容: 我正在尝试更新具有两个主键的Model。 模型 移民 这是应该更新库存模型的代码,但不是。 我收到此错误: 我也尝试使用updateOrCreate()方法。它不起作用(我得到同样的错误)。 谁能告诉我们应该如何更新带有两个主键的Model? 问题答案: 我已经遇到过几次这个问题。您需要覆盖一些属性: 和方法(功劳): 请记住,此代码需要引用Eloquent Builder类, 我建议

  • 我严重卡在一张有复合钥匙的桌子上。我试图用雄辩的口才通过两个主键过滤记录。但是我开始知道雄辩不支持复合键。我经历了许多解决方案,但没有一个解决方案足够清晰,让初学者理解。 解决方案代码表示使用以下代码编辑模型类: 我想使用laravel提供的资源控制器执行更新功能:我的代码如下所示: 另外,请指导我如何使用带有主键的资源控制器,因为它会为一些参数抛出错误?请帮帮我。我读了很多在线文章,真的很累,但

  • 假设这两个对象有相同的键;

  • 问题内容: 嗨, 我的lucene索引经常用新记录更新,索引中有5,000,000条记录,并且正在使用FieldCache缓存我的一个数字字段。但是在更新索引之后,需要花费一些时间来重新加载FieldCache(由于重新加载缓存,导致文档说DocID不可靠),所以如何通过仅将新添加的DocID添加到FieldCache来最小化此开销,导致此功能成为瓶颈应用。 我想要一种通过仅将新添加的文档添加到数

  • 是否可以使用更新对象的属性? 类似于: 我试过: 还有这个: 第一个会导致语法错误,而第二个则什么也不做。有什么想法吗?

  • 问题内容: 我需要采取目前的hql: 并将其更改为 我的问题是与distinct关键字有关。它在使用新的Object查询类型的hql查询中属于什么位置。一种想法是使用子选择,让我与众不同。我试过添加,但不起作用。 问题答案: 好的,对感兴趣的人来说,正确的语法是