我正在尝试DELETE
从 .It 获取最新的 20 条记录。mysql
这意味着它们将是最后 20 条记录。所以问题是我该怎么做?我尝试过类似的方法delete from MyTable limit 20
,但它删除了旧的 20 条记录(意味着前 20 条记录)。
我见过这个问题,但问题是,在MyTable
,我没有主要或自动增量字段。我希望我能很好地解释我的问题。请指导解决方案。
问问题
4969 次
3 回答
6
您需要一列来指示哪些条目是旧的或新的。这可以是日期时间列或增加的数字或任何指示顺序的内容。
delete from MyTable
order by some_column desc
limit 20
但数据库不按特定顺序存储数据。你必须定义一个。
于 2013-09-30T10:04:35.360 回答
0
创建另一个表,其设计与旧表相同,但具有额外的自动递增列。
计算旧表中有多少行。称之为x。
设y = x - 20。
将旧表中的所有内容插入新表(让该自动递增列自动递增),但使用
limit y
现在您有了旧表中的所有行,除了最后 20 行。基于数据的一些排序。
最后,删除旧表,并解决以后不要创建缺少主键的表,否则您将再次遇到此问题。
如果有一列确定插入行的日期和时间,则可以在插入时按升序排序。如果没有,那么就数据库引擎而言,“最新 20 行”没有多大意义。
于 2013-09-30T10:10:32.080 回答
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`;
您可以将一些逻辑放入限制计算中,但这应该会引导您。
于 2015-05-20T15:24:31.967 回答