2017-02-04 22 views
0

我是MYSQL的新手,當我將一些數據加載到表中後,某些行被刪除後出現問題。例如,讓我們說我們有以下模式MYSQL加載數據時某些行被刪除

(用戶ID INTEGER,UserInterests VARCHAR(200))

和我有這樣

1|*|Sports 
1|*|Gaming 
1|*|Eat 
2|*|Sports 
2|*|Gaming 
2|*|Sleep 

數據I執行加載這樣

LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE Users 
FIELDS TERMINATED BY '|*|'; 

但隨後,該有同樣的UserInterests行被刪除,所以當我做下面的查詢

SELECT * FROM Users; 

我得到

1 EAT 
1 Gaming 
2 Sleep 
1 Sports 

但我希望得到的東西像

1 EAT 
1 Gaming 
1 Sports 
2 Sleep 
2 Sports 
2 Gaming 

可能有人請解釋一下,我是做了一個錯誤?

回答

0

如果您的列UserInterests有唯一索引(例如主鍵),那麼這將是預期的行爲。唯一的索引會阻止您多次使用相同的數據。通常情況下,你會得到一個重複鍵錯誤,但是當你在LOAD DATA LOCAL INFILE使用LOCAL,你只會得到一個警告,看到documentation

LOCAL也影響錯誤處理:

  • 隨着LOAD DATA INFILE,數據解釋和重複鍵錯誤會終止操作。

  • 隨着LOAD DATA LOCAL INFILE,數據詮釋和重複鍵錯誤變成警告和操作繼續,因爲服務器沒有辦法阻止在操作過程中的文件傳輸。對於重複鍵錯誤,這與指定IGNORE時相同。 IGNORE在本節後面進一步解釋。

因此,檢查和糾正你的索引。我假設您目前使用UserInterests作爲該表中的主鍵,而您可能需要具有由兩個列組成的主鍵。

+0

謝謝。事實證明,我試圖建立一個多對多的關係,我有一個主鍵和另一個列。我能夠將桌子分成3個桌子並解決問題。 –