Zeilen mit einem Bereich in MySQL löschen
Wenn Sie versuchen, einen bestimmten Zeilenbereich aus einer Tabelle mithilfe der LIMIT-Klausel in MySQL zu löschen, Es kann ein Fehler auftreten. Zur Veranschaulichung zielt die folgende Abfrage darauf ab, einen Bereich von 50 Zeilen zu löschen, beginnend mit der 20. Zeile, geordnet nach Zeitstempel in absteigender Reihenfolge:
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
Beim Ausführen dieser Abfrage wird jedoch eine Fehlermeldung angezeigt eine ungültige Syntax, insbesondere beim OFFSET-Wert (50).
Einschränkung der LIMIT-Klausel in der DELETE-Anweisung
Die Hauptursache des Fehlers liegt in der Unmöglichkeit der Verwendung OFFSET in der LIMIT-Klausel von DELETE-Anweisungen. Dies ist ein wesentlicher Unterschied zu SELECT-Anweisungen, die es sowohl LIMIT als auch OFFSET ermöglichen, den Startpunkt und die Anzahl der abzurufenden Zeilen anzugeben.
Problemumgehung für Bereichslöschung
Zu Um diese Einschränkung zu umgehen, ist eine Problemumgehung erforderlich. Durch die Verwendung einer in der DELETE-Anweisung verschachtelten Unterabfrage kann der Zeilenbereich genau gezielt ausgewählt und entfernt werden. Dieser Ansatz umfasst die folgenden Schritte:
Hier ist ein Beispiel für eine geänderte Abfrage, die diese Problemumgehung verwendet:
DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )
In dieser Abfrage die primäre Es wird die Schlüsselspalten-ID angenommen, sie kann jedoch in Ihrem spezifischen Szenario in den entsprechenden Spaltennamen geändert werden.
Das obige ist der detaillierte Inhalt vonWie lösche ich einen Zeilenbereich in MySQL, ohne OFFSET in der DELETE-Anweisung zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!