【问题标题】:Is there a way to overwrite a table with LOAD DATA LOCAL INFILE?有没有办法用 LOAD DATA LOCAL INFILE 覆盖表?
【发布时间】:2020-06-13 16:05:30
【问题描述】:

我有一个 CSV 文件正在加载到我的数据库中。我希望每次加载 CSV 文件时都覆盖表中的先前数据,而不是附加。是否可以在单个查询中执行此操作?

TRUNCATE 表然后利用LOAD DATA INFILE 查询的唯一解决方案吗?

【问题讨论】:

  • 如果在加载之前有一条记录,但文件中没有相同的记录,您想要什么结果:应该保留旧记录还是删除?
  • 应该删除旧记录。
  • 在这种情况下,您必须先truncateLOAD DATA 命令无法为您完成。

标签: mysql sql load-data-infile


【解决方案1】:

假设你有一个主键,你可以使用REPLACE。正如documentation 所说:

REPLACE 和 IGNORE 修饰符控制输入行的处理 在唯一键值上复制现有行:

  • 如果指定 REPLACE,输入行将替换现有行。换句话说,主键或唯一索引具有相同值的行 作为现有行。请参阅第 13.2.9 节,“REPLACE 语句”。

但是,如果要替换现有表,则先截断该表,然后再加载。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2012-06-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多