7

伪表:

 | primary_key | first_name | last_name | date_of_birth |
 | 1           | John Smith |           | 07/04/1982    |

目前first_name包含多行的用户全名。期望的结果是拆分数据,因此 first_name 包含“John”,last_name 包含“Smith”。

我有一个 CSV 文件,其中包含所需的数据格式:

 | primary_key | first_name | last_name |
 | 1           | John       | Smith     |

有没有办法使用 LOAD DATA INFILE 命令处理 CSV 文件以使用 primary_key 更新此表中的所有行 - 并且在此过程中不替换行中的任何其他数据(即 date_of_birth)?

4

2 回答 2

7

在这种情况下,我通常会LOAD DATA INFILE使用相同结构的临时表。然后我INSERTON DUPLICATE KEY UPDATE临时表到真实表。这允许在不破坏真实表的情况下进行数据类型检查;它相对较快,并且不需要摆弄您的 .csv 文件。

于 2009-10-01T21:31:30.537 回答
5

不会。虽然LOAD DATA INFILE有一个 REPLACE 选项,但它实际上会替换有问题的行 - 即删除现有行并插入新行。

如果您将 LOAD DATA INFILE 配置为仅插入某些列,则所有其他列将设置为其默认值,而不是它们当前包含的值。

您可以修改您的 CSV 文件以包含一堆 UPDATE 语句吗?通过一些正则表达式替换应该相当简单。

于 2009-10-01T21:17:56.840 回答