2013-07-01 72 views
2

我每天都從外部服務器收到一個MySQL轉儲文件.sql,我沒有任何控制權。我創建了一個本地數據庫來存儲.sql文件中的所有數據。我希望我可以設置一個腳本來每天自動更新本地數據庫。我每天收到的sql文件包含已經在本地數據庫中的舊數據。我如何避免這些舊數據的重複,並只插入到本地MySQL服務器的新數據?非常感謝你!如何在更新MySQL數據庫時避免重複?

+0

[如何在MySQL中插入'如果不存在'?](http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql) –

回答

5

您可以在具有適當字段的表格上使用PRIMARY KEY或UNIQUE索引來停止重複記錄。

PRIMARY KEY 

使用INSERT IGNORE而不是INSERT。如果一條記錄沒有複製現有的記錄,MySQL會照常插入它。如果記錄是重複的,那麼IGNORE關鍵字告訴MySQL放棄它而不會產生錯誤。

INSERT IGNORE 
1

在場上使用unique constraints,你想要是唯一的。另外,正如Danny Beckett所提到的,爲了避免輸出中的錯誤(我希望將其重定向到文件以供將來分析,如果我沒有遺漏任何進程中的內容),您可以使用INSERT IGNORE構造而不是INSERT

+0

會產生一堆錯誤並且無法插入。 –

+1

+1你的答案形成一個完整的:) – Stephan

+0

@Stephan我刪除了我的答案,因爲Ganesh的更好,但謝謝':)' –

2

您可以使用第三方數據庫比較工具,如那些從紅門建立兩個數據庫,一個電流(你的「主」)和新的轉儲。然後,您可以在兩個版本之間運行比較工具,只更新它們之間的更改,更新主控。

+0

+1不錯的選擇,但我認爲這是一個「矯枉過正」的當前情況 – Stephan

+0

@Stephan謝謝。 OP沒有對數據庫的大小,他想要更新的表/數量做任何評論。發佈的所有其他解決方案都假定每個表中的主鍵,比較工具不需要一個。 –

0

您可以使用IGNORE語句支持的約束。

第二個選項,您可以先將數據插入臨時表。然後只插入差異。

使用第二個選項,您可以使用一些限制來通過添加存儲在數據庫中的記錄來搜索重複數據。

0

如果這是一個普通的mysqldump文件,然後通常它包括DROP TABLE IF EXISTS...語句和CREATE TABLE語句,所以當數據被導入的表被重新創建。所以重複數據不應該是一個問題,除非我失去了一些東西。