我有一个mysql表,我需要在添加其他记录之前只包含20条最新记录。 每天都会添加新行,因此我希望首先删除任何大于最早允许的记录。
该表包含一个自动增量“id”列,因此我可以轻松确定哪些是最早的记录。
感谢您的帮助。
答案 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)
将DELETE
与ORDER BY
和LIMIT
:
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