假设我有一个包含三个字段的MySQL表:键,值1,值2

我想从文件inserts.txt加载两个字段(键,值1)的数据。
inserts.txt的内容:

1;2
3;4


与:

LOAD DATA LOCAL INFILE
   "inserts.txt"
REPLACE
INTO TABLE
    `test_insert_timestamp`
FIELDS TERMINATED BY ';'


但是在替换的情况下,我想保持value2不变。

我怎样才能做到这一点?

最佳答案

REPLACE语句包含以下算法:


  MySQL对REPLACE(和LOAD DATA ... REPLACE)使用以下算法:
  
  尝试将新行插入表中
  
  插入失败的原因是,
  主键或唯一索引:
  
  
  从表中删除具有重复键的冲突行
  值
  再试一次将新行插入表中
  


https://dev.mysql.com/doc/refman/5.7/en/replace.html

因此,您无法保留将要删除的行中的值。

您想要做的是模拟“ ON DUPLICATE KEY UPDATE”逻辑。

您不能在单个LOAD DATA查询中执行此操作。您要做的是先将数据加载到临时表中,然后将INSERT从临时表插入到目标表中,在这里您将可以使用“ ON DUPLICATE KEY UPDATE”功能。

整个过程在此问题的最高支持答案中有详细说明:MySQL LOAD DATA INFILE with ON DUPLICATE KEY UPDATE

关于mysql - MySQL加载数据文件中保留不变的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49434486/

10-11 01:47
查看更多