Datenbanktabelle bis auf die letzten X Zeilen leeren

Wenn du eine Datenbanktabelle leeren möchtest, jedoch die letzten X Zeilen behalten möchtest (in nachfolgenden Beispielen 20), dann kannst do folgendes SQL-Statement nutzen:

DELETE
FROM `my_table`
WHERE id NOT IN (
    SELECT id
    FROM (
             SELECT id
             FROM `my_table`
             ORDER BY id DESC LIMIT 20 -- Anzahl Einträge, die verbleiben soll
         ) subquery);

Um eine umfangreiche ID-Liste zu vermeiden kann stattdessen auch folgendes Statement genutzt werden:

DELETE
FROM `my_table`
WHERE id <= (SELECT id
             FROM (SELECT id
                   FROM `my_table`
                   ORDER BY id DESC LIMIT 1
                   OFFSET 20 -- Anzahl Einträge, die verbleiben soll
                  ) subquery)

Schreibe einen Kommentar