我有一个包含1000条记录的数据库。 我正在尝试创建一个SQL语句,因此如果记录数增长到1000以上,则删除最旧的记录(即1000以上的新记录'替换'最旧的记录)。 我正在使用SQLite,但我认为通常的SQL语法适合这里。
答案 0 :(得分:44)
如果使用自动增量字段,则可以轻松编写此字段以删除最早的100条记录:
DELETE FROM mytable WHERE id IN (SELECT id FROM mytable ORDER BY id ASC LIMIT 100)
或者,如果不存在此类字段,请使用ROWID
:
DELETE FROM mytable WHERE ROWID IN (SELECT ROWID FROM mytable ORDER BY ROWID ASC LIMIT 100)
或者,只保留最新的1000条记录:
DELETE FROM mytable WHERE ROWID IN (SELECT ROWID FROM mytable ORDER BY ROWID DESC LIMIT -1 OFFSET 1000)
答案 1 :(得分:1)
假设您的表具有主键和带有时间戳的列,该列指示何时插入记录),您可以使用
行的查询。delete from tableToDeleteFrom
where tablePK in
(select tablePK
from tableToDeleteFrom
where someThresholdDate <= @someThresholdDate)
答案 2 :(得分:-4)
要删除除第一条记录(最小/最大ID)以外的所有记录,您可以使用:
SET @ls AS INT
SELECT @ls = MIN(id) FROM DATA
DELETE FROM DATA WHERE id <> @ls