首页 > 数据库 > mysql教程 > 如何高效删除MySQL中除最近的N条记录之外的所有记录?

如何高效删除MySQL中除最近的N条记录之外的所有记录?

Mary-Kate Olsen
发布: 2025-01-08 16:17:41
原创
394 人浏览过

How to Efficiently Delete All but the N Most Recent Records in MySQL?

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>
登录后复制

嵌套子查询至关重要。 如果没有它,您将遇到如下错误:

  • SQL 错误 (1093): 您无法修改在同一查询中选择的表。
  • SQL 错误 (1235): 禁止在 LIMIT 子查询中直接使用 NOT IN

此结构化查询有效地绕过了这些限制,成功删除了除指定数量的最近记录(由 LIMIT 子句定义)之外的所有记录。 请记住将 42 替换为您想要的 N 值。

以上是如何高效删除MySQL中除最近的N条记录之外的所有记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板