从mysql db中删除最新的X记录

时间:2013-09-30 10:02:35

标签: mysql sql sql-delete

我正在尝试DELETE来自mysql的最新20条记录。这意味着它们将是最后20条记录。所以问题是我该怎么做?我尝试了类似delete from MyTable limit 20的内容,但它删除了旧的20条记录(意味着前20条记录) 我见过this question但问题是,在MyTable中,我没有主要或自动增量字段。 我希望我能很好地解释我的问题。请指导解决方案。

3 个答案:

答案 0 :(得分:4)

您需要一个列,指示哪些条目是旧的或新的。这可以是日期时间列,也可以是递增数字或指示订单的任何内容。

delete from MyTable 
order by some_column desc
limit 20

但DB不按特定顺序存储数据。你必须定义一个。

答案 1 :(得分:0)

使用与旧表相同的设计创建另一个表,但使用额外的自动递增列。

计算旧表中有多少行。称之为 x

y = x - 20。

从旧表中插入新表中的所有内容(让自动递增列自动递增),但使用

limit y

现在你拥有旧表中的所有行,除了最后的20行。基于数据的一些排序。

最后,删除旧表,并决定在将来没有创建缺少主键的表,否则你将再次遇到这个问题。

如果有一列确定插入行的日期和时间,则可以在执行插入时按升序排序。如果没有,那么就数据库引擎而言,“最新的20行”没有多大意义。

答案 2 :(得分:0)

每个数据库系统最快的方法是在新表中选择列并删除旧表,并将新列重命名为旧表:

-- Assuming you have 100 records and want to drop the latest 30
create table `new_temp` as 
select * from `old_table`
limit 70;

drop table `old_table`;

alter table `new_temp` rename to `old_table`;

你可以在限制计算中加入一些逻辑,但这应该引导你。