MySQL: Alle bis auf die N aktuellsten Einträge entfernen
Bei der Datenbankverwaltung müssen häufig ältere Datensätze entfernt und die aktuellsten beibehalten werden. Dies kann in MySQL durch eine clevere SQL-Abfrage erreicht werden, ohne auf Variablen angewiesen zu sein.
Ein häufiger, aber fehlerhafter Versuch ist:
<code class="language-sql">DELETE FROM table ORDER BY id ASC LIMIT ((SELECT COUNT(*) FROM table) - N);</code>
Dieser Ansatz schlägt aufgrund von Einschränkungen in der DELETE-Anweisung von MySQL fehl.
Eine robuste Lösung beinhaltet eine verschachtelte Unterabfrage:
<code class="language-sql">DELETE FROM `table` WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM `table` ORDER BY id DESC LIMIT 42 -- Replace 42 with the number of records to keep (N) ) as recent_records );</code>
Die verschachtelte Unterabfrage ist entscheidend. Ohne diese Angabe treten Fehler auf wie:
LIMIT
direkt innerhalb einer NOT IN
-Unterabfrage ist verboten.Diese strukturierte Abfrage umgeht diese Einschränkungen effizient und löscht erfolgreich alle bis auf die angegebene Anzahl aktueller Datensätze (definiert durch die LIMIT
-Klausel). Denken Sie daran, 42
durch den gewünschten Wert von N
zu ersetzen.
Das obige ist der detaillierte Inhalt vonWie lösche ich effizient alle bis auf die N neuesten Datensätze in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!