如果count大于20,如何从表中删除

时间:2010-05-26 04:57:06

标签: mysql

我有一个mysql表,我需要在添加其他记录之前只包含20条最新记录。 每天都会添加新行,因此我希望首先删除任何大于最早允许的记录。

该表包含一个自动增量“id”列,因此我可以轻松确定哪些是最早的记录。

感谢您的帮助。

5 个答案:

答案 0 :(得分:5)

您可以在查询中使用LIMIT关键字指定偏移量,以保留最新的20行。然而,根据MySQL的文档,没有简单的方法可以从偏移量一直限制到最后一个;相反,他们建议:

  

要检索从某个偏移量到结果集末尾的所有行,您可以使用一些大数字作为第二个参数。

所以这个SQL应该可以解决这个问题:

DELETE FROM table ORDER BY id DESC LIMIT 20, 18446744073709551615;

答案 1 :(得分:3)

使用mysql 5,你不能在delete语句中使用offset。 进一步阅读:http://dev.mysql.com/doc/refman/5.0/en/delete.html

我设法使用以下技术来实现保留一定数量的最新记录。 mySQL subquery limit

答案 2 :(得分:0)

DELETEORDER BYLIMIT

一起使用
DELETE FROM MyTable
ORDER BY MyTable.id DESCENDING
LIMIT 20,18446744073709551615;

这将留下最多id的20条记录并删除其余记录。

答案 3 :(得分:0)

offset声明没有delete。 请参阅https://stackoverflow.com/a/8303440/2576076,它提供了一个很好的解决方案。

答案 4 :(得分:-3)

为什么不保持所有记录不受影响?
这是数据库的发明。 如果您只想保留最新数据,则可能需要另一个存储空间,例如memcache