请问mysql如何仅保留最新10条数据而删除其他记录啊?

寒川 发布于 2012/11/18 11:27
阅读 6K+
收藏 1
保留最新10条数据而删除其他所有记录的sql咋写啊?关键是要mysql能运行。
加载中
0
eonezhang
eonezhang
嵌套SQL,先选出最新10,然后再not in
寒川
寒川
对于mysql好像不行,我试过了,*** id not in(select *** order by id desc limit 10)
0
王昊然
王昊然
他的意思应该是表里只存10条数据,用 触发器 吧
王昊然
王昊然
回复 @eonezhang : 恩,都可以
eonezhang
eonezhang
或者是只如前十条,然后写个脚本定期清楚多余的
eonezhang
eonezhang
用redis队列吧,不用数据库
王昊然
王昊然
回复 @寒川 : mysql 5.0 之后的版本均可使用触发器
寒川
寒川
恩,就这个意思。关键mysql貌似不行?当然,分步骤肯sql执行定是能解决的,但是不想那么麻烦。有何高见啊?
0
虫儿飘
虫儿飘
delete from table limit 10,总数目
0
八宝旗
八宝旗

引用来自“虫儿飘”的答案

delete from table limit 10,总数目

mysql会报sql语法错误的。

如果想准确控制最多不会超过10条,应该只能用触发器


如果定时清理,假设是按照主键排序,并且主键是自增

先查出最新第10个主键ID,然后再删除主键小于"第10个主键ID"的所有记录

DELETE tb FROM tb_name AS tb ,(SELECT pk_id FROM tb_name ORDER BY pk_id desc LIMIT 9,1) AS tmp
WHERE tb.pk_id<tmp.pk_id

0
牛牛牛牛
牛牛牛牛
用limit 必须要有一个可以可以线性排序的列,否则无效
0
大拿猪

begin

delete from tb where id<new.id-10;

end

简单假设不会有其他主动的删除行为了

返回顶部
顶部