gpt4 book ai didi

mysql - 选择MySQL中除top N之外的所有内容

转载 作者:行者123 更新时间:2023-11-29 02:04:19 27 4
gpt4 key购买 nike

我有一个表,其中包含我不需要保留很长时间的数据,所以每天晚上我都想删除除最后 20 行之外的所有行。

为此,我找到了以下查询:

DELETE FROM Table WHERE ID NOT IN (
SELECT id FROM (
SELECT TOP 10 ID FROM Table
) AS x
)

MySQL 不支持 TOP 函数,所以我重写了它以使用 LIMIT 代替:

DELETE FROM Table WHERE ID NOT IN (
SELECT id FROM (
SELECT ID FROM Table ORDER BY ID DESC LIMIT 10
) AS x
)

不幸的是,MySQL 似乎不支持子查询中的 LIMIT 函数。那我现在该怎么办?

如何选择除具有最高 ID 的 10 行之外的所有行?

我可能只删除所有早于一天之类的记录,但感觉我应该能够这样做。

最佳答案

由于 MySQL 在您要删除的同一张表中读取时存在缺陷,因此最简单的选择通常是使用临时表。

INSERT INTO yourTempTable
SELECT id FROM yourTable
ORDER BY ID DESC LIMIT 10

DELETE yourTable WHERE id IN (SELECT id FROM yourTempTable)

或其许多变体(使用连接而不是 IN 等)。

主要考虑的不是如何编写第二个查询,而是竞争条件。

您的数据可能会在临时表和删除之间被另一个进程更改。如果这可能并且很重要,您需要将其全部包装在事务中并在 yourTable 上加一个表锁。

关于mysql - 选择MySQL中除top N之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9116436/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com