Heim > Datenbank > MySQL-Tutorial > Wie kann ich alle bis auf die N neuesten Datensätze in MySQL löschen?

Wie kann ich alle bis auf die N neuesten Datensätze in MySQL löschen?

Linda Hamilton
Freigeben: 2025-01-08 16:31:48
Original
934 Leute haben es durchsucht

How Can I Delete All But the N Latest Records in MySQL?

So löschen Sie alle Datensätze außer den neuesten N-Datensätzen in SQL

Dies ist ein häufiges Problem: Ihre Tabelle ist voller Datensätze, Sie möchten jedoch nur die neuesten N Datensätze behalten und den Rest löschen. Die von Ihnen gestellte Abfrage zeigt zwar die Absicht, erreicht ihren Zweck jedoch aufgrund von Einschränkungen von MySQL nicht.

Keine Sorge, es gibt Lösungen! Die folgende Abfrage führt zu den gewünschten Ergebnissen:

<code class="language-sql">DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT N -- 保留最新的N条记录
  ) foo
);</code>
Nach dem Login kopieren

Abfragezerlegung:

  1. Das Ziel der DELETE-Anweisung ist die Tabelle „table“, die zum Löschen von Datensätzen verwendet wird.
  2. Die WHERE-Klausel schließt zu löschende Datensätze aus, indem sie prüft, ob die ID in der Unterabfrage nicht vorhanden ist.
  3. Die Unterabfrage wählt die neuesten N Datensätze aus, indem sie die Datensätze in absteigender Reihenfolge sortiert (ID DESC) und die Ergebnisse einschränkt.
  4. Die Zwischenunterabfrage (foo) ist notwendig, um MySQL-Einschränkungen zu mildern.

Einschränkungen umgangen:

  • Zwischenunterabfragen verhindern „Fehler in der FROM-Klausel beim Aktualisieren der Zieltabelle“, indem sie die Unterabfrage von der DELETE-Operation isolieren.
  • Es vermeidet außerdem „LIMIT & IN/ALL/ANY/SOME subquery“-Fehler, indem eine Unterabfrage von Unterabfragen verwendet wird.

Optimierungsanleitung:

Abhängig von Ihrem Anwendungsfall finden Sie möglicherweise die folgende optimierte Abfrage besser geeignet:

<code class="language-sql">DELETE FROM `table`
ORDER BY id DESC
LIMIT ROWS COUNT() - N -- 只保留最新的N条记录</code>
Nach dem Login kopieren

Wenn es Ihren Anforderungen entspricht, sollten Sie diese Optimierung in Betracht ziehen, da sie die Leistung erheblich verbessern kann.

Das obige ist der detaillierte Inhalt vonWie kann ich alle bis auf die N neuesten Datensätze in MySQL löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage