
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!
Der Unterschied zwischen Gateway und Router
Verwendung der sqrt-Funktion in Java
Checken Sie den virtuellen Standort auf DingTalk ein
WeChat-Momente können nicht aktualisiert werden
ASUS x402c
Der Unterschied zwischen Fußnoten und Endnoten
So konvertieren Sie Ape in WAV
Was sind die Parameter des Festzeltes?