伪表:
| 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)?
答案 0 :(得分:7)
在这种情况下,我通常LOAD DATA INFILE
到具有相同结构的临时表。然后我从临时表到真实表INSERT
ON DUPLICATE KEY UPDATE
。这允许在不破坏真实表的情况下进行数据类型检查;它相对较快,不需要摆弄你的.csv文件。
答案 1 :(得分:5)
没有。虽然LOAD DATA INFILE有一个REPLACE选项,但实际上替换有问题的行 - 也就是说,删除现有行并插入一个新行。
如果您将LOAD DATA INFILE配置为仅插入某些列,则其他所有列都将设置为默认值,而不是当前包含的值。
您是否可以修改CSV文件以包含一堆UPDATE语句?通过一些正则表达式替换应该相当简单。