Mysql加载数据infile留下未更改的字段

时间:2018-03-22 17:04:51

标签: mysql file-upload mariadb

假设我有一个包含三个字段的MySQL表:key,value1,value2

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

1;2
3;4

使用:

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

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

我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:1)

REPLACE语句包含以下算法:

  

MySQL使用以下算法进行REPLACE(和LOAD DATA ... REPLACE):

     

尝试将新行插入表格

     

插入失败,因为a发生了重复键错误   主键或唯一索引:

     
      
  • 从表中删除具有重复键的冲突行   值

  •   
  • 再次尝试将新行插入表格

  •   

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