1

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

4

3 回答 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 回答