我有一個mysql表,我需要只包含20個最新的記錄之前添加其他記錄。 每日添加新行,所以我希望它先刪除大於最早開始的20個記錄。如何從表中刪除如果計數大於20
該表包含一個自動增量「id」列,以便我可以輕鬆確定哪些是最早的記錄。
感謝您的任何幫助。
我有一個mysql表,我需要只包含20個最新的記錄之前添加其他記錄。 每日添加新行,所以我希望它先刪除大於最早開始的20個記錄。如何從表中刪除如果計數大於20
該表包含一個自動增量「id」列,以便我可以輕鬆確定哪些是最早的記錄。
感謝您的任何幫助。
您可以在查詢中指定LIMIT
關鍵字的偏移量,以保留最新的20行。但是,根據MySQL的文檔,沒有簡單的方法可以從偏移量一直限制到最後一個;相反,他們建議這樣做:
要檢索從某個偏移量直到結果集結尾的所有行,可以使用一些大數目作爲第二個參數。
所以這個SQL應該做的伎倆:
DELETE FROM table ORDER BY id DESC LIMIT 20, 18446744073709551615;
使用DELETE
與ORDER BY
和LIMIT
:
DELETE FROM MyTable
ORDER BY MyTable.id DESCENDING
LIMIT 20,18446744073709551615;
這將使20條記錄與最大id
並刪除其餘。
數字不會比18446744073709551615有任何_more_ magic :-) – paxdiablo 2010-05-26 05:11:26
Downvoter care to comment? – 2014-01-08 12:15:52
爲什麼不給所有的記錄不變?
這是數據庫被髮明。 如果你想只保留最新的數據,你可能需要另一個存儲,比如memcache
保留在該表中的記錄是臨時的,因此我只需要它將最後的20條記錄用作與新數據的比較。 – joseph 2010-05-26 05:18:11
磁盤空間 - 效率 – 2016-08-24 15:25:06
對於mysql 5,你不能在刪除語句中使用偏移量。 在這裏讀更多:http://dev.mysql.com/doc/refman/5.0/en/delete.html
我已經設法使用以下技術來實現保留一定數量的最新記錄。 mySQL subquery limit
delete
聲明中沒有offset
。 請參閱https://stackoverflow.com/a/8303440/2576076,它提供了一個很好的解決方案。
這會很好用,謝謝 – joseph 2010-05-26 05:20:01
DELETE'語句的'LIMIT'中沒有'OFFSET'參數。 – vearutop 2012-08-13 12:40:25