是否可以使用LOAD DATA INFILE类型命令来更新数据库中的行?

时间:2009-10-01 21:10:31

标签: mysql load-data-infile

伪表:

 | 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)?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

没有。虽然LOAD DATA INFILE有一个REPLACE选项,但实际上替换有问题的行 - 也就是说,删除现有行并插入一个新行。

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

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