我正在尝试DELETE
来自mysql
的最新20条记录。这意味着它们将是最后20条记录。所以问题是我该怎么做?我尝试了类似delete from MyTable limit 20
的内容,但它删除了旧的20条记录(意味着前20条记录)
我见过this question但问题是,在MyTable
中,我没有主要或自动增量字段。
我希望我能很好地解释我的问题。请指导解决方案。
答案 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`;
你可以在限制计算中加入一些逻辑,但这应该引导你。