Mysql 加载数据到文件中,保留未更改的字段

标签 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 不变。

我怎样才能实现这个目标?

最佳答案

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/

相关文章:

mysql - 使用Mysql查询将两列结果合并为单列数据

amazon-web-services - Amazon S3 如何在 “folder” 中列出文件

java - 如何处理 MaxUploadSizeExceededException

mysql - 错误1005(HY000): Can't create table 'CBDB.Subsystem' (errno: 150)

mysql - 错误 #1064 - 你的 SQL 语法有错误

mysql - Drupal:更改多个节点的访问级别

MySql 查询浏览器结果

php - Tinymce 使用 php 获取内容

java.lang.NoClassDefFoundError : org/apache/commons/io/output/DeferredFileOutputStream 错误

mysql - docker wordpress容器无法连接到数据库容器