2009-10-01 19 views
7

伪表:是否可以使用LOAD DATA INFILE类型命令来更新db中的行?

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

回答

5

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

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

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

7

在这种情况下,我通常将LOAD DATA INFILE添加到具有相同结构的临时表中。然后,我将INSERTON DUPLICATE KEY UPDATE从临时表到实际表。这可以进行数据类型检查而不会破坏您的真实表格;它相对较快,并且不需要弄乱.csv文件。

+0

我认为这是最有效的解决方案,因为REPLACE可能会很慢。您的解决方案可以一次管理插入(新记录)和更新(现有记录)。 – 2016-09-15 15:50:28