2011-02-23 49 views
0

我想導入一個大的csv文件(大約12MO)到mysql表中,首先我試着用LOAD DATA INFILE它工作完美,但在我的情況下,我想先測試csv行以確定我是否想要更新數據或插入新記錄 所以解決方案是讀取文件並將每行的內容與表中已有的數據進行比較,並採取正確的行動 此方法也可以工作,但需要很多時間和資源加載csv文件內容到mysql表中驗證

現在我的問題是

1:我可以使用phpMyAdmin(開源) 和我的公關進口功能oject是COMERCIAL

2:如果我可以的,你知道這一些教程(任何想法)

3:如果不,我不能,是否有導出/導入

這樣的商業框架

謝謝

+0

我看不出12Mb是如何被認爲是一個「大文件」。 – MarkR 2011-02-23 17:55:54

+0

加載數據infile具有「替換|忽略」關鍵字。 – shantanuo 2011-03-01 11:34:44

回答

2

這實際上很常見的SQL:你要插入或更新,是嗎?所以你需要兩條語句(一條用於更新,一條用於插入)以及一種判斷是否應該插入的方法。你真正需要的是一個獨特的密鑰,將永遠不會被複制的單個記錄(可以是複合鍵)和兩個語句,就像這樣:

UPDATE right SET 
    right1 = left1, 
    right2 = left2, 
    etc 
FROM the_import_table right 
LEFT JOIN the_existing_data left ON left.key = right.key 
WHERE right.key IS NOT NULL --note that I write in TSQL 

INSERT INTO right (
    right1, 
    right2, 
    etc 
) SELECT 
    left1, 
    left2, 
    etc 
FROM left 
LEFT JOIN right on left.key = right.key 
WHERE right.key IS NULL 

注意,您可以使用一組與運算的使用組合鍵WHERE中的值,並注意你沒有更新組合鍵,但是你可能插入了組合鍵。這應該很好讓你開始。在您要求澄清之前,請使用實際代碼更新您的問題。

1

MySQL有特定的插入syntax來處理重複的行。