2015-10-03 28 views
0

我正在將一堆INSERT ON DUPLICATE KEY UPDATE添加到填充了數據的表格中。將數據插入到已有數據的表格中,然後刪除會話期間未觸及的數據

我需要用該數據填充表格,並刪除我沒有填充的數據(我的意思是刪除在我的INSERTs中未提及的行)。

我試過,什麼是工作:

  1. 在表中創建新的時間戳列
  2. 在INSERT語句中插入或CURRENT_TIMESTAMP更新此列,讓我感動了所有行具有最新的時間戳
  3. 運行刪除查詢,刪除比我的腳本的開始時間早的所有行。

這種想法的作品完美,但有一個問題:我的複製二進制日誌得到填補上這兩種模式(ROW和STATEMENT)unnececary數據。我不需要那些時間戳被複制...

我不想在插入前做TRUNCATE TABLE,因爲我的應用程序應該提供對數據(舊的或新的)的不間斷訪問。如果我做TRUNCATE TABLE表可以在一段時間內沒有數據。

我還可以保存我插入到腳本內存或臨時表中的所有主鍵值,然後刪除不在該表中的行,但我希望有一種更優化和巧妙的方式來實現這一點。

你有什麼想法我怎麼能實現這個目標,所以我可以更新數據,只刪除未觸及的行,只複製更改(我猜在行模式)?

+0

編輯您的問題並提供有關該用例的更多詳細信息。您要更換多少數據?應用程序可以在更新之前和之後使用「部分」數據嗎?有多少列正在修改?在大多數情況下,「truncate table」方法似乎是正確的方法,所以很高興知道爲什麼它不適用於您的情況。 –

+0

@GordonLinoff這個案例寫在我的問題中:因爲我應該刪除對數據的不間斷訪問,不管它是舊的還是新的,這就是爲什麼。如果truncate表被複制,然後連接刪除從表將是空的。這根本不好。我不希望桌子在任何時候都是空的。 – joyeyhoup

+0

。 。您還有其他考慮因素(例如複製),這些考慮因素僅被提及並未提供任何大小。我最好的猜測是,使用分區的解決方案可能是最適合您的問題的解決方案。你仍然會有一個添加和刪除分區的「打嗝」,但這應該是小開銷並且與數據大小無關。 –

回答

0

我對複製二進制日誌不是很熟悉,如果不行,請提前對不起。我認爲可以爲表格設置不同的日誌記錄。

我會做到以下幾點:

  • 創建表的新數據具有相同主鍵列與 舊錶
  • 刪除舊錶中的所有行,其中在新表中找不到根據新表

這種方式不會是不必要的日誌中插入舊錶

  • 更新行。 這假定您在服務器中具有所需的空間,但可以工作。

  • 相關問題