2009-10-01 20 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