2011-02-11 48 views

回答

1

正如MySQL文檔團隊的成員表示here

It's not atomic. The records loaded prior to the error will be in the 
table. 

角落找尋工作是將數據導入到專用表,然後執行INSERT INTO ... SELECT ...這將是原子操作。在龐大的數據集上,這是潛在的問題,因爲長期交易。

+0

請注意,這適用於不支持事務的MyISAM表。 InnoDB至少將LOAD DATA ...視爲一項交易。 – nos 2011-09-20 21:28:51

1

MySQL manual表示MySqlBulkLoader是'LOAD DATA INFILE'的包裝。如果你指定IGNORE,那 重複上一個獨特的 鍵值的現有行被跳過輸入行

:注視「LOAD DATA INFILE」的文件,我注意到這一段。如果不指定 指定任一選項,則行爲 取決於是否指定LOCAL關鍵字 。如果沒有LOCAL,則在找到重複鍵值 並忽略文本文件 的其餘部分時會發生錯誤 。使用LOCAL時,默認 的行爲與指定IGNORE爲 的行爲相同;這是因爲服務器 無法在操作過程中停止傳輸 文件。

我發現沒有關於交易的討論,但上面的段落表明交易不可能。

解決方法是將數據導入到導入表中,然後使用單獨的存儲過程來使用事務將數據處理到所需的表中。

所以在寫回信

相關問題