【问题标题】:LOAD DATA INFILE and ON DUPLICATE KEY UPDATE加载数据文件并在重复密钥更新时
【发布时间】:2012-06-23 18:50:29
【问题描述】:

使用 LOAD DATA INFILE 时,有没有办法获得与常规 INSERT 语句的 ON DUPLICATE KEY UPDATE 提供的相同功能?

我要做的是:对于我文件的每一行,如果该行不存在,则插入一个新行,否则更新所选字段。

我的表有 5 列:A、B、C、D 和 E。A 是主键。有时,我必须插入包含所有值的新行,但有时我只需要更新 B 和 C,例如。但是,关键是我想将所有 INSERT 或 UPDATE 重新组合到同一个文件中。

谢谢

【问题讨论】:

  • 你能给出你的目标表的结构吗?另外,还有一点不清楚。如果该行已经存在,为什么要更新它?
  • 不,你不能。 load 语句用于直接“在整个文件中啜饮”。如果加载的行与现有记录有主/唯一键冲突,您唯一的选择是“替换”参数来执行完整记录交换:dev.mysql.com/doc/refman/5.1/en/load-data.html
  • 我已经编辑了这个问题。关于现有行,因为我想更新它们的一些字段,但不是全部。
  • @MarcB 替换记录对我没有帮助,因为我会丢失我不想更新的字段中的信息。
  • 那么不要使用加载文件查询——它不能做你想做的事。

标签: mysql


【解决方案1】:

如果要插入/更新某些字段,则应将数据加载到附加表中,然后使用INSERT、UPDATE或INSERT...SELECT+ON DUPLICATE KEY UPDATE语句复制/修改数据;否则其他字段将被设置为 NULL。

在这种情况下,LOAD DATA INFILE 中的 REPLACE 选项对您没有帮助。


另外,您可以使用 dbForge Studio for MySQL(免费快递版)中的Data Import 工具(CSV 格式),只需选择追加/更新导入模式并在数据导入向导中指定字段映射。

【讨论】:

  • 这取决于数据大小、索引。你应该测试它来回答。
猜你喜欢
  • 2013-03-07
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2014-10-31
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多