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