MySQL DELETE-Anweisung mit Limit
Ein Benutzer stößt auf einen Fehler, während er versucht, Zeilen aus einer Tabelle mit der folgenden Abfrage zu löschen:
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
Die Fehlermeldung weist darauf hin, dass die Syntax falsch ist.
Erklärung
Der Fehler tritt auf, weil die hier verwendete DELETE-Anweisung einen Offset im LIMIT enthält Klausel. Dies ist in MySQL nicht zulässig. Die LIMIT-Klausel kann nur die Anzahl der zu löschenden Zeilen angeben.
Lösung
Um einen angegebenen Zeilenbereich aus einer Tabelle zu löschen, können Sie die Offset-Funktion nicht verwenden in der LIMIT-Klausel. Stattdessen müssen Sie eine Unterabfrage verwenden, um die zu löschenden Zeilen auszuwählen und sie dann mithilfe ihrer Primärschlüsselwerte zu löschen.
Die folgende Abfrage kann in diesem Szenario verwendet werden:
DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )
Diese Abfrage verwendet doppelte Verschachtelung, um die zu löschenden Zeilen auszuwählen und die Einschränkungen von MySQL zu umgehen.
Das obige ist der detaillierte Inhalt vonWie lösche ich einen bestimmten Zeilenbereich in MySQL mithilfe der LIMIT-Klausel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!