Wie MySQL doppelte Zeilen löscht

How Mysql Delete Duplicate Rows



MySQL ist ein relationaler Datensatz, der Daten in Tabellen mit Zeilen und Spalten speichert. Die in der Datenbank gespeicherten Daten können jedoch aufgrund von Fehlern in den Anwendungen oder Benutzern doppelte Werte enthalten.

In diesem Tutorial erfahren Sie, 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 laufen auf Ihrem System
  2. Sie haben Root-Zugriff auf die Datenbank.
  3. Sie haben Zugriff auf eine Datenbank zum Experimentieren oder Testen

HINWEIS : Wenn Sie eine Beispieldatenbank benötigen, um die in diesem Handbuch bereitgestellten Konzepte auszuprobieren, ziehen Sie bitte die Sakila-Datenbank in Betracht oder laden Sie eine Kopie der in diesem Handbuch verwendeten Datenbank herunter.



Im Folgenden werden Ressourcen bereitgestellt:





Grundlegende Verwendung

Bevor wir beginnen, erstellen wir absichtlich eine Tabelle mit doppelten Werten zu Testzwecken. Die SQL-Abfragen zum Ausführen dieser Aktion sind unten:

VERWENDEN Welt;
TROPFEN TISCH WENN EXISTIERT Benutzer;
SCHAFFEN TISCH Benutzer(Ich würde INT PRIMÄRSCHLÜSSEL NICHT NULL AUTO_INCREMENT ,Nutzername VARCHAR (10) NICHT NULL ,vollständiger Name VARCHAR (zwanzig),Email VARCHAR (255) NICHT NULL );
EINFÜGUNG HINEIN Benutzer(Nutzername,vollständiger Name,Email) WERTE
('Jungfrau', 'Claude M.Mori', ' [E-Mail geschützt] '),
('Drücken Sie', 'Tiffany G. Bailey', ' [E-Mail geschützt] '),
('Rakete', 'Christoph S. Payton', ' [E-Mail geschützt] '),
('Dunkle Materie', 'Patricia J. Fox', ' [E-Mail geschützt] '),
('Gegenstand', 'Faye H. Hartley', ' [E-Mail geschützt] '),
('Dunkle Materie', 'Patricia J. Fox', ' [E-Mail geschützt] '),
('Rakete', 'Christoph S. Payton', ' [E-Mail geschützt] '),
('artemis', 'Wesley C. Dillard', ' [E-Mail geschützt] ');

Fühlen Sie sich frei, die obige Abfrage an Ihre Bedürfnisse anzupassen. Sie sollten auch sicherstellen, dass Sie die Datenbank (Welt) erstellt haben, um Fehler zu vermeiden.



Wenn wir nun alle Daten in der Tabelle und nach Benutzername geordnet erhalten, sehen wir die Duplikate, die wir wie gezeigt haben:

mysql> verwenden Welt;
Datenbank geändert
mysql> AUSWÄHLEN * VON Benutzer SORTIEREN NACH Nutzername;
+ ---- + ------------ + ---------------------- + ------- ---------------- +
|Ich würde|Nutzername|vollständiger Name|Email|
+ ---- + ------------ + ---------------------- + ------- ---------------- +
| 8 |artemis|Wesley C. Dillard|[E-Mail geschützt]|
| 4 |Dunkle Materie|Patricia J. Fox|[E-Mail geschützt]|
| 6 |Dunkle Materie|Patricia J. Fox|[E-Mail geschützt]|
| 2 |Drücken Sie|Tiffany G. Bailey|[E-Mail geschützt]|
| 5 |Gegenstand|Faye H. Hartley|[E-Mail geschützt]|
| 3 |Rakete|Christopher S. Payton|[E-Mail geschützt]|
| 7 |Rakete|Christopher S. Payton|[E-Mail geschützt]|
| 1 |Jungfrau|Claude M. Mori|[E-Mail geschützt]|
+ ---- + ------------ + ---------------------- + ------- ---------------- +

Wie Sie der obigen Tabelle entnehmen können, haben wir zwei doppelte Werte, die die Datenbank ohne Grund größer machen und zu langsamen Geschwindigkeiten führen.

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, besteht darin, die MySQL-Anweisung DELETE JOIN zu verwenden. Die Abfrage verwendet jedoch IDs, um doppelte Werte zu entfernen.

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

LÖSCHEN Tabelle 1 VON Benutzertabelle1 INNERE BEITRETEN Benutzertabelle2 WO table1.id<table2.id UND table1.email=table2.email;

Sobald Sie die obige Abfrage ausführen, entfernen Sie die doppelten Werte, wie in der folgenden Ausgabe gezeigt:

mysql> LÖSCHEN Tabelle 1 VON Benutzertabelle1 INNERE BEITRETEN Benutzertabelle2 WO table1.id<table2.id UND table1.email=table2.email;
Abfrage OK, 2Reihen betroffen(0,01Sek)

mysql> AUSWÄHLEN * VON Benutzer SORTIEREN NACH Nutzername;
+ ---- + ------------ + ---------------------- + ------- ---------------- +
|Ich würde|Nutzername|vollständiger Name|Email|
+ ---- + ------------ + ---------------------- + ------- ---------------- +
| 8 |artemis|Wesley C. Dillard|[E-Mail geschützt]|
| 6 |Dunkle Materie|Patricia J. Fox|[E-Mail geschützt]|
| 2 |Drücken Sie|Tiffany G. Bailey|[E-Mail geschützt]|
| 5 |Gegenstand|Faye H. Hartley|[E-Mail geschützt]|
| 7 |Rakete|Christopher S. Payton|[E-Mail geschützt]|
| 1 |Jungfrau|Claude M. Mori|[E-Mail geschützt]|
+ ---- + ------------ + ---------------------- + ------- ---------------- +

#2 – Row_Number() Funktion

Die zweite Methode, die wir implementieren können, ist die Verwendung der MySQL-Funktion row_number(). Diese Funktion wird ab MySQL Version 8 unterstützt.

Es funktioniert, indem jeder Zeile ein sequenzieller int-Wert zugewiesen wird, wobei Zeilen mit doppelten Werten einen Wert höher als 1 erhalten.

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

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number

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

AUSWÄHLEN Ich würde VON ( AUSWÄHLEN Ich würde,ZEILENNUMMER()ÜBER( TEILUNG NACH Benutzername SORTIEREN NACH Nutzername) WIE row_var VON Benutzer)t1 WO row_var> 1;

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

+ ---- +
|Ich würde|
+ ---- +
| 6 |
| 7 |
+ ---- +
2Reihen in einstellen (0,01Sek)

Wenn Sie die Werte entfernen möchten, ersetzen Sie einfach die SELECT-Anweisung durch die DELETE-Anweisung, wie unten gezeigt:

LÖSCHEN VON Benutzer WO Ich würde IN ( AUSWÄHLEN Ich würde VON ( AUSWÄHLEN Ich würde,ZEILENNUMMER()ÜBER( TEILUNG NACH Benutzername SORTIEREN NACH Nutzername) WIE row_var VON Benutzer)t1 WO row_var> 1);

Schließlich können Sie mit der SELECT-Anweisung überprüfen, ob die doppelten Werte entfernt wurden.

mysql> AUSWÄHLEN * von Benutzer SORTIEREN NACH Nutzername;
+ ---- + ------------ + ---------------------- + ------- ---------------- +
|Ich würde|Nutzername|vollständiger Name|Email|
+ ---- + ------------ + ---------------------- + ------- ---------------- +
| 8 |artemis|Wesley C. Dillard|[E-Mail geschützt]|
| 4 |Dunkle Materie|Patricia J. Fox|[E-Mail geschützt]|
| 2 |Drücken Sie|Tiffany G. Bailey|[E-Mail geschützt]|
| 5 |Gegenstand|Faye H. Hartley|[E-Mail geschützt]|
| 3 |Rakete|Christopher S. Payton|[E-Mail geschützt]|
| 1 |Jungfrau|Claude M. Mori|[E-Mail geschützt]|
+ ---- + ------------ + ---------------------- + ------- ---------------- +

Abschluss

In diesem Tutorial haben wir die beiden Methoden zum Entfernen doppelter Werte aus einer Datenbank besprochen. Große Datenbanken, insbesondere solche, die häufig verwendet werden, können viele doppelte Werte von externen Importen und anderen Fehlern enthalten. Daher müssen doppelte Werte ständig gelöscht werden, um sicherzustellen, dass Anwendungen optimal funktionieren.