假设我有一个包含三个字段的 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 不变。
我怎样才能实现这个目标?
最佳答案
REPLACE 语句由以下算法组成:
MySQL uses the following algorithm for REPLACE (and LOAD DATA ... REPLACE):
Try to insert the new row into the table
While the insertion fails because a duplicate-key error occurs for a primary key or unique index:
Delete from the table the conflicting row that has the duplicate key value
Try again to insert the new row into the table
( 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 加载数据到文件中,保留未更改的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434486/