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中文网其他相关文章!