Philipp Hasenfratz: MySql: alle Datenbnk Einträge löschen (bis auf die ersten 30!)

Beitrag lesen

Halihallo Jenny

Ich würde meine MySQL Datenbank gerne automatisiert aufräumen hab allerdings nicht den richtigen Query, damit >> die letzten 30 Einträge sortiert nach Datum erhalten bleiben <<:

  1. Erstelle eine HEAP-Tabelle und speichere dort die ersten 30
       Einträge mittels REPLACE INTO. Dann lösche die alte Tabelle
       mittels DELETE FROM oldtable und speichere alle Daten der HEAP-
       Tabelle wieder in der alten Tabelle.
       http://www.mysql.com/doc/en/HEAP.html
       http://www.mysql.com/doc/en/REPLACE.html
  2. SELECT time FROM table ORDER BY time ASC LIMIT 29,1
       DELETE FROM table WHERE time>"vorherige time in SELECT-Statement"
       Beachte aber, dass dies - falls time kein PRIMARY KEY ist - nur
       eine approximative Lösung ist, da ja theoretisch jede time den
       selben Wert haben kann und somit gar keine Datensätze gelöscht
       werden würden. Oder besser:
  3. MySQL>4.x :
       DELETE FROM table WHERE id NOT IN (
          SELECT id FROM table ORDER BY time ASC LIMIT 30
       )
  4. Nun ja, falls es denn nur 30 Datensätze sind: Lies sie doch
       einfach über eine 4GL-Sprache deiner Wahl aus, lösche die Tabelle
       und füge die vorher ausgelesenen wieder ein...

Eine schöne Lösung kann ich nicht finden (nun, die 4 gefällt mir,
hängt jedoch von der Version des MySQL-Systems ab)...

Zusatz: Arbeite bei derartigen Geschichten und Workarounds _immer_
        mit Table-LOCK, sonst gibts irreparablen Datenverlust!

ich dachte mir sowas wie:
DELETE FROM table ORDER BY time DESC LIMIT 30, 100000
^^ funktioniert leider nicht...

Dann _immer_ Fehler + Version angeben!

Viele Grüsse

Philipp