2012-06-01 107 views
0

這裏是我使用csv文件加載mysql表的查詢。LOAD DATA LOCAL INFILE需要幫助

LOAD DATA LOCAL INFILE table.csv REPLACE INTO TABLE table1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\'' LINES TERMINATED BY 'XXX' IGNORE 1 LINES 

SET date_modified = CURRENT_TIMESTAMP;

假設我的CSV包含500個包含15列的記錄。我更改了三行,並以'XXX'結尾。我現在想用這個文件更新mysql表。我的主鍵是自動遞增的值。當我運行這個查詢時,所有的500行都得到了舊數據的更新,我更改的行也被添加爲新數據。我不想要新的。我希望我的表格可以用原來的csv替換。我嘗試將我的主鍵更改爲非AI,但它仍然無效。請指點?謝謝。

+0

爲什麼不截斷表格然後導入數據文件? – Ander2

+0

是的,這是一個選項,但用戶需要這種方式。標記行更改很容易,而不是刪除未更改的行。您的意思是,對吧? – user1165952

+0

我認爲@Ander2的意思是你清除其所有內容的現有表,然後導入更改後的文件。 – SQLCurious

回答

0

我在這裏做一些假設。

1)您的文件中沒有自動編號值。

由於您的主鍵不在您的文件中,MySQL將無法匹配行。自動編號主鍵是一個人工鍵,因此它不是數據的一部分。當插入行時,MySQL添加了這個人造主鍵。

讓我們假設您的文件包含一些唯一的標識符讓我們稱之爲Identification_Number。這個數字既在文件中,你的表格也將它用作主鍵,在這種情況下,MySQL將能夠識別文件中的行並將它們與表中的行進行匹配。

雖然很多人只會在數據庫中使用自動編號,但我總是會檢查數據中是否有自然鍵。如果我確定一個,我會在表中使用這個自然鍵進行一些性能測試。然後根據兩者的性能指標,然後決定一個密鑰。

希望我沒有把你的問題弄錯,但我懷疑這可能是這種情況。

+0

我的文件和表都有自動遞增的值。 – user1165952

+0

做文件和數據庫中的值是否匹配? – Namphibian

+0

是的,主鍵值在文件和數據庫中均匹配。 – user1165952