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