Wie MySQL doppelte Zeilen löschen

Wie MySQL doppelte Zeilen löschen
MySQL ist ein relationaler Datensatz, der Daten in Tabellen mit Zeilen und Spalten speichert. Die in der Datenbank gespeicherten Daten können jedoch doppelte Werte enthalten, die durch Fehler in den Anwendungen oder Benutzern verursacht werden.

In diesem Tutorial lernen wir, wie Sie doppelte Zeilen in einer MySQL -Datenbank entfernen, um die Datenbankgröße zu reduzieren und die Leistung des Servers zu erhöhen.

Bevor wir fortfahren, gehen wir davon aus:

  1. Sie haben mySQL installiert und ausgeführt auf Ihrem System
  2. Sie haben einen Root -Zugriff auf die Datenbank.
  3. Sie haben Zugriff auf eine Datenbank zum Experimentieren oder Testen

NOTIZ: Wenn Sie eine Beispieldatenbank benötigen, um die in diesem Handbuch bereitgestellten Konzepte auszuprobieren.

Ressourcen werden unten bereitgestellt:

Grundnutzung

Bevor wir beginnen, werden wir absichtlich eine Tabelle erstellen, die doppelte Werte für Testzwecke enthält. Die SQL -Abfragen zur Ausführung dieser Aktion finden Sie unten:

Welt benutzen;
Droptabelle, wenn Benutzer existiert;
Tabelle erstellen Benutzer (ID int Primärschlüssel, nicht null auto_increment, Benutzername varchar (10) NICHT NULL, FULL_NAME VARCHAR (20), E -Mail Varchar (255) NICHT NULL);
Einfügen in Benutzer (Benutzername, full_name, E -Mail) Werte ein
("Jungfrau", "Claude M. Mori "," Claude@Google Mail.com "),
("Pulsa", "Tiffany G. Bailey "," [email protected] "),
("Rocket", "Christopher S". Payton "," [email protected] "),
("Darkmatter", "Patricia J. Fox "," [email protected] "),
("PWNC", "Faye H. Hartley "," [email protected] "),
("Darkmatter", "Patricia J. Fox "," [email protected] "),
("Rocket", "Christopher S". Payton "," [email protected] "),
("Artemis", "Wesley C. Dillard "," [email protected] ");

Fühlen Sie sich frei, die obige Abfrage so zu ändern, dass Sie Ihren Anforderungen entsprechen. Sie sollten auch sicherstellen, dass Sie die Datenbank (Welt) erstellt haben, um Fehler zu vermeiden.

Wenn wir jetzt alle Daten in der Tabelle und in der Reihenfolge nach Benutzername erhalten, werden wir die Duplikate sehen, die wir wie gezeigt haben:

MySQL> Nutze Welt;
Datenbank geändert
MySQL> Auswählen * von Benutzern bestellen nach Benutzername;
+----+------------+-----------------------+-----------------------+
| id | Benutzername | full_name | E -Mail |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 4 | Darkmatter | Patricia j. Fuchs | [email protected] |
| 6 | Darkmatter | Patricia j. Fuchs | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | pwnc | Faye h. Hartley | [email protected] |
| 3 | Rakete | Christopher s. Payton | [email protected] |
| 7 | Rakete | Christopher s. Payton | [email protected] |
| 1 | Jungfrau | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Wie Sie aus der obigen Tabelle sehen können, haben wir zwei doppelte Werte, die die Datenbank ohne Grund größer machen und langsame Geschwindigkeiten verursachen.

Lassen Sie uns nun lernen, wie wir diese Werte entfernen können.

#1 - Join löschen

Eine Möglichkeit, doppelte Zeilen in einer Datenbank zu entfernen. Die Abfrage verwendet jedoch IDs, um doppelte Werte zu entfernen.

Um beispielsweise die doppelten Werte in der oben genannten Benutzertabelle zu entfernen, können wir eingeben:

Löschen Sie die Tabelle 1 von Benutzern Tabelle 1 Inner -Join -Benutzer Tabelle 2 WHERE TABLE1.Ausweis < table2.id AND table1.email = table2.email;

Sobald Sie die obige Abfrage ausgeführt haben, entfernen Sie die doppelten Werte wie in der folgenden Ausgabe gezeigt:

MySQL> Tabelle 1 aus den Benutzern Tabelle 1 Inner Join -Benutzer Tabelle 2 WHERE TABLE1.Ausweis < table2.id AND table1.email = table2.email;
Abfrage OK, 2 Zeilen betroffen (0.01 Sek.)
MySQL> Auswählen * von Benutzern bestellen nach Benutzername;
+----+------------+-----------------------+-----------------------+
| id | Benutzername | full_name | E -Mail |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 6 | Darkmatter | Patricia j. Fuchs | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | pwnc | Faye h. Hartley | [email protected] |
| 7 | Rakete | Christopher s. Payton | [email protected] |
| 1 | Jungfrau | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

#2 - row_number () Funktion

Die zweite Methode, die wir implementieren können, ist die Verwendung von MySQL row_number () -Funktion. Diese Funktion wird in MySQL Version 8 und höher unterstützt.

Es funktioniert, indem es jeder Zeile einen sequentiellen Int -Wert zuweist, wobei Zeilen doppelte Werte enthalten, die einen Wert höher als 1 erhalten.

Um mehr über diese Funktion zu erfahren, verwenden Sie die unten angegebene Ressource:

https: // dev.Mysql.com/doc/refman/8.0/eN/Fensterfunktionsschreibungen.html#function_row-number

Betrachten Sie die folgende Abfrage, die die ID der Zeilen mit doppelten Werten zurückgibt:

ID aus (SELECT ID, row_number () over (Partition nach Benutzername Order by Benutzername) als row_var aus Benutzern) t1 WHERE ROW_VAR> 1;

Sobald Sie die obige Abfrage ausgeführt haben, sollten Sie die Liste der IDs erhalten, wie in der folgenden Ausgabe gezeigt:

+----+
| id |
+----+
| 6 |
| 7 |
+----+
2 Zeilen im Set (0.01 Sek.)

Wenn Sie die Werte entfernen möchten, ersetzen Sie einfach die Auswahlanweisung durch die unten gezeigte Löschanweisung:

Löschen Sie von Benutzern, wobei ID in (ID ID aus (auswählen ID, row_number () over (Partition nach Benutzername bestellen nach Benutzername) als row_var von Benutzern) T1 WHERE ROW_VAR> 1);

Schließlich können Sie überprüfen, ob die doppelten Werte mit der Auswahlanweisung entfernt werden.

MySQL> Auswählen * von Benutzern bestellen nach Benutzername;
+----+------------+-----------------------+-----------------------+
| id | Benutzername | full_name | E -Mail |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley c. Dillard | [email protected] |
| 4 | Darkmatter | Patricia j. Fuchs | [email protected] |
| 2 | Pulsa | Tiffany g. Bailey | [email protected] |
| 5 | pwnc | Faye h. Hartley | [email protected] |
| 3 | Rakete | Christopher s. Payton | [email protected] |
| 1 | Jungfrau | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Abschluss

In diesem Tutorial haben wir die beiden Methoden zum Entfernen von doppelten Werten aus einer Datenbank besprochen. Große Datenbanken, insbesondere solche, die gemeinsam verwendet werden, können viele doppelte Werte aus externen Importen und anderen Fehlern enthalten. Daher besteht die Notwendigkeit, doppelte Werte weiter zu löschen, um sicherzustellen, dass Anwendungen optimal funktionieren.