2

我一直有新数据进入应用程序,所以我想将表中的行数限制为 100 条记录。我将其描述为 FIFO 队列。每当有新数据(一次只有几行)进入时,表“底部”的旧数据就会被清除并删除。由于它是先进先出,我不想手动执行排序,然后删除,然后重新插入。我想必须有便宜的方法来做到这一点,对吧?谢谢

4

1 回答 1

1

像这样的查询将显示所有记录,最新的在前:

SELECT *
FROM MyTable
ORDER BY Date DESC    -- or some autoincrementing ID column

使用 OFFSET 子句,您可以跳过第一条记录。这意味着您将获得前 100 条记录之外的所有记录,即,您将获得那些应该删除的记录:

SELECT *
FROM MyTable
ORDER BY Date DESC
LIMIT -1 OFFSET 100

然后,您可以在子查询中使用它来实际删除记录:

DELETE FROM MyTable
WHERE ID IN (SELECT ID
             FROM MyTable
             ORDER BY Date DESC
             LIMIT -1 OFFSET 100)
于 2013-10-23T07:52:50.180 回答