wake-up-neo.net

Wie lösche ich eine Reihe von Datensätzen gleichzeitig in MySQL?

Ich habe Zeilen über 60000 in meiner Tabelle. Wie kann ich Zeilen von 40000 bis 50000 gleichzeitig löschen?

36
user994535

Sie können die between-Funktion verwenden: 

delete from exampleTable where id between 40000 and 50000

oder:

delete from exampleTable where id >= 40000 and id <= 50000

ziemlich einfach?

74
Yoram de Langen

Ich gehe davon aus, dass Sie dies basierend auf der Standardreihenfolge der Tabelle tun möchten, und Sie haben keinen natürlichen Schlüssel oder eine andere Möglichkeit, diese in den Tabellendaten zu ordnen. 

Das heißt SELECT * FROM WORDS gibt zurück:

Hi
Hello
Bye
Goodbye
What's up

Wenn Sie also sagten, Sie wollten die Zeilen 2 bis 4 löschen, möchten Sie Hello, Bye und Goodbye löschen. Recht? 

Ist die Rückgabereihenfolge Ihrer Tabelle deterministisch? Mit anderen Worten, erhalten Sie die Ergebnisse jedes Mal in derselben Reihenfolge? Im Idealfall können Sie in Ihrer Tabelle eine Spalte identifizieren, die Daten enthält, aus denen Sie die Schlüssel auswählen können, wodurch Sie die Antwort von Tricker verwenden können. 

Ist dies nicht der Fall, müssen Sie die Zeilennummer für die Anweisung between verwenden. Ich bin kein MySQL-Benutzer, der folgende Code wäre ohne Zweifel sauberer, wenn ich es wäre. Außerdem habe ich nicht einmal eine MySQL-Datenbank, um die Abfrage zu testen. Ich habe eine SQL-Anweisung zusammengestellt, die diesen Beitrag als Referenz für das Abrufen einer Zeilennummer in Mysql verwendet. Wie kann ich mit MySQL eine Spalte erstellen, die den Datensatzindex in einer Tabelle enthält?

Meine Abfrage geht davon aus, dass Sie eine Art Primärschlüssel in Ihrer Tabelle haben. Wenn nicht, gibt es keine Möglichkeit zu garantieren, dass Sie keine überflüssigen Zeilen löschen, und außerdem das gute Design der Tabelle. 

DELETE FROM YOUR_TABLE 
WHERE primarykey = 
(SELECT  primarykey FROM 
   (SELECT t.primarykey, 
           @curRow := @curRow + 1 AS row_number
   FROM    YOUR_TABLE t
   JOIN    (SELECT @curRow := 0) r) 
WHERE row_number between 40000 and 50000);
3
Evan

Wenn Sie keinen Primärschlüssel haben und nach Zeilenanzahl löschen möchten, d. H. Zeilenbereich, kann dies über den Export von mysql export erfolgen. Benutzerdefinierten Export durchführen - Geben Sie die Startzeile und die Startanzahl an . In Ihrem Fall benötigen Sie zwei Exporte: einen für die Zeilen 0 - 40k, den zweiten für die 50. letzten . Importieren Sie dann diese beiden Dateien in die Tabelle ..__ Hinweis: Wenn ein Problem beim Import großer Dateien besteht, empfehle ich BigDump. http://www.ozerov.de/bigdump/

0
A programmer

Tisch: Lebensmittelgeschäft

iD-Element

1 Reis __2 Seife __3 Reis __4 Reis

DELETE FROM 'Lebensmittelgeschäft' WO Element = "Reis" LIMIT 2

Das ist leichter als alle Ideen. Für diesen Artikel können 2 Datensätze gelöscht werden.

Und die Antwort lautet:

2 Zeilen gelöscht.

SELECT * FROM Lebensmittelgeschäft;

iD-Element

1 Reis, 2 Seife

0
varshini