2010-05-26 50 views
3

我有一個mysql表,我需要只包含20個最新的記錄之前添加其他記錄。 每日添加新行,所以我希望它先刪除大於最早開始的20個記錄。如何從表中刪除如果計數大於20

該表包含一個自動增量「id」列,以便我可以輕鬆確定哪些是最早的記錄。

感謝您的任何幫助。

回答

5

您可以在查詢中指定LIMIT關鍵字的偏移量,以保留最新的20行。但是,根據MySQL的文檔,沒有簡單的方法可以從偏移量一直限制到最後一個;相反,他們建議這樣做:

要檢索從某個偏移量直到結果集結尾的所有行,可以使用一些大數目作爲第二個參數。

所以這個SQL應該做的伎倆:

DELETE FROM table ORDER BY id DESC LIMIT 20, 18446744073709551615; 
+0

這會很好用,謝謝 – joseph 2010-05-26 05:20:01

+9

DELETE'語句的'LIMIT'中沒有'OFFSET'參數。 – vearutop 2012-08-13 12:40:25

0

使用DELETEORDER BYLIMIT

DELETE FROM MyTable 
ORDER BY MyTable.id DESCENDING 
LIMIT 20,18446744073709551615; 

這將使20條記錄與最大id並刪除其餘。

+4

數字不會比18446744073709551615有任何_more_ magic :-) – paxdiablo 2010-05-26 05:11:26

+0

Downvoter care to comment? – 2014-01-08 12:15:52

-3

爲什麼不給所有的記錄不變?
這是數據庫被髮明。 如果你想只保留最新的數據,你可能需要另一個存儲,比如memcache

+0

保留在該表中的記錄是臨時的,因此我只需要它將最後的20條記錄用作與新數據的比較。 – joseph 2010-05-26 05:18:11

+0

磁盤空間 - 效率 – 2016-08-24 15:25:06

相關問題