首頁 > 資料庫 > mysql教程 > MySQL如何刪除除最新的N筆記錄以外的所有記錄?

MySQL如何刪除除最新的N筆記錄以外的所有記錄?

Linda Hamilton
發布: 2025-01-08 16:31:48
原創
894 人瀏覽過

How Can I Delete All But the N Latest Records in MySQL?

SQL中如何刪除除最新N筆記錄外的所有記錄

這是一個常見的問題:您的表格充滿了記錄,但您只想保留最新的N筆記錄,而刪除其餘的記錄。雖然您提出的查詢演示了意圖,但由於MySQL的限制,它未能達到目的。

別擔心,解決方案存在!以下查詢將實現您想要的結果:

<code class="language-sql">DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT N -- 保留最新的N条记录
  ) foo
);</code>
登入後複製

查詢分解:

  1. DELETE語句的目標是'table'表,用於刪除記錄。
  2. WHERE子句透過檢查id是否不存在於子查詢中來排除要刪除的記錄。
  3. 子查詢透過依降序排列記錄(id DESC)並限制結果來選擇最新的N筆記錄。
  4. 中間子查詢(foo)對於減輕MySQL限制是必要的。

繞過的限制:

  • 中間子查詢透過將子查詢與DELETE操作隔離來防止「FROM子句中更新目標表的錯誤」。
  • 它也透過使用子查詢的子查詢來避免「LIMIT & IN/ALL/ANY/SOME子查詢」錯誤。

最佳化說明:

根據您的用例,您可能會發現以下最佳化的查詢更合適:

<code class="language-sql">DELETE FROM `table`
ORDER BY id DESC
LIMIT ROWS COUNT() - N -- 只保留最新的N条记录</code>
登入後複製

如果符合您的要求,請考慮此最佳化,因為它可以顯著提高效能。

以上是MySQL如何刪除除最新的N筆記錄以外的所有記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板