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:
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;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;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;#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:
+----+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;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.