MySQL:刪除除 N 個最近條目之外的所有條目
資料庫管理通常需要刪除較舊的記錄,同時保留最新的記錄。 這可以在 MySQL 中使用巧妙的 SQL 查詢來實現,而不依賴變數。
一個常見但有缺陷的嘗試是:
<code class="language-sql">DELETE FROM table ORDER BY id ASC LIMIT ((SELECT COUNT(*) FROM table) - N);</code>
由於 MySQL 的 DELETE 語句的限制,此方法失敗。
一個強大的解決方案涉及巢狀子查詢:
<code class="language-sql">DELETE FROM `table` WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM `table` ORDER BY id DESC LIMIT 42 -- Replace 42 with the number of records to keep (N) ) as recent_records );</code>
巢狀子查詢至關重要。 如果沒有它,您將遇到以下錯誤:
LIMIT
子查詢中直接使用 NOT IN
。 此結構化查詢有效地繞過了這些限制,成功刪除了除指定數量的最近記錄(由 LIMIT
子句定義)之外的所有記錄。 請記得將 42
替換為您想要的 N
值。
以上是如何有效率地刪除MySQL中除最近的N筆記錄之外的所有記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!