gpt4 book ai didi

mysql - 在MySQL中删除 'older'行的正确方法

转载 作者:行者123 更新时间:2023-11-29 01:59:49 24 4
gpt4 key购买 nike

我的表有一个 TIME 字段。

我只想保留 5 个最新行。

我可以不使用 SELECT 删除旧行吗?

我觉得逻辑应该是这样的:

DELETE FROM tbl WHERE row_num > 5 ORDER BY TIME

如何在不使用 SELECT 获取 TIME 值列表的情况下在 MySQL 中实现这一点?

最佳答案

如果没有适当的 ORDER BY 子句,SQL 结果集必须被视为无序

您必须提供一个列来明确存储您的行序号。这可能是时间戳或表的 auto_increment 列。

请记住,您也可以并发访问您的表。如果在您删除时其他人正在插入,预期的行为应该是什么?据我所知,这可能会导致您只保留“5 个最新行”+“在其他事务中插入的行”的情况。


如果您的表中有用于此目的的 time 列和 PRIMARY KEY(或其他一些 UNIQUE NOT NULL 列),您可以写:

DELETE tbl FROM tbl LEFT JOIN (SELECT * FROM tbl ORDER BY tm DESC LIMIT 5) AS k
ON (tbl.pk) = (k.pk)
WHERE k.`time` IS NULL;

如果你有复合主键 (a,b) 你可以这样写:

DELETE tbl FROM tbl LEFT JOIN (SELECT * FROM tbl ORDER BY tm DESC LIMIT 5) AS k
ON (tbl.a,tbl.b) = (k.a,k.b)
WHERE k.tm IS NULL;

关于mysql - 在MySQL中删除 'older'行的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18097077/

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