Подтвердить что ты не робот

Удалить самые старые записи из базы данных

У меня есть база данных с 1000 записей. Я пытаюсь создать инструкцию SQL, поэтому, если количество записей превышает 1000, то старые записи удаляются (т.е. Новые записи выше 1000 заменят "самые старые записи" ). Я использую SQLite, но я предполагаю, что обычный синтаксис SQL подойдет здесь.

4b9b3361

Ответ 1

Если вы используете поле auto-increment, вы можете легко записать это, чтобы удалить самые старые 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)

Ответ 2

Предполагая, что в вашей таблице есть первичный ключ и столбец с меткой времени, указывающей, когда была вставлена ​​запись), вы можете использовать запрос вдоль строк

delete from tableToDeleteFrom
where tablePK in 
(select tablePK 
from tableToDeleteFrom
where someThresholdDate <= @someThresholdDate)

Ответ 3

Для удаления всех записей, кроме первой записи (min/max id), вы можете использовать:

SET @ls AS INT

SELECT @ls = MIN(id) FROM DATA

DELETE FROM DATA WHERE id <> @ls