Jak MySQL usuwają zduplikowane wiersze

Jak MySQL usuwają zduplikowane wiersze
MySQL to relacyjny zestaw danych, który przechowuje dane w tabelach, które mają wiersze i kolumny. Jednak dane przechowywane w bazie danych mogą zawierać zduplikowane wartości spowodowane błędami w aplikacjach lub użytkownikach.

W tym samouczku dowiemy się, jak usunąć zduplikowane wiersze w bazie danych MySQL, aby zmniejszyć rozmiar bazy danych i pomóc zwiększyć wydajność serwera.

Zanim będziemy kontynuować, zakładamy:

  1. Masz zainstalowany i uruchomiony w swoim systemie MySQL
  2. Masz dostęp do bazy danych.
  3. Masz dostęp do bazy danych do eksperymentowania lub testowania

NOTATKA: Jeśli potrzebujesz przykładowej bazy danych, aby wypróbować koncepcje podane w tym przewodniku, rozważ bazę danych Sakila lub pobierz kopię bazy danych używanej w tym przewodniku.

Zasoby są podane poniżej:

Podstawowe użycie

Zanim zaczniemy, celowo utworzymy tabelę zawierającą zduplikowane wartości do celów testowych. Zapytania SQL do wykonania tej akcji są poniżej:

Użyj świata;
Stół zrzutu, jeśli istnieje użytkownicy;
Utwórz użytkowników tabeli (Id int podstawowy klucz nie null auto_increment, nazwa użytkownika varchar (10) nie null, full_name varchar (20), e -mail varchar (255) nie null);
Wstaw do użytkowników (nazwa użytkownika, nazwa Full_name, e -mail)
(„Panna”, „Claude m. Mori ”,„ [email protected] ”),
(„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] ”);

Zmodyfikuj powyższe zapytanie, aby pasowały do ​​twoich potrzeb. Powinieneś również upewnić się, że masz utworzoną bazę danych (świat), aby uniknąć błędów.

Teraz, jeśli weźmiemy wszystkie dane w tabeli i w kolejności nazwy użytkownika zobaczymy, jak pokazano, jak pokazano:

mysql> Użyj świata;
Baza danych zmieniła się
Mysql> Wybierz * Z użytkowników Zamów według nazwy użytkownika;
+----+------------+-----------------------+-----------------------+
|. Id | Nazwa użytkownika | Full_name | E -mail |
+----+------------+-----------------------+-----------------------+
|. 8 | Artemis | Wesley c. Dillard | [email protected] |
|. 4 | Darkmatter | Patricia J. Fox | [email protected] |
|. 6 | Darkmatter | Patricia J. Fox | [email protected] |
|. 2 | pulsa | Tiffany g. Bailey | muś[email protected] |
|. 5 | PWNC | Faye h. Hartley | [email protected] |
|. 3 | Rakieta | Christopher s. Payton | [email protected] |
|. 7 | Rakieta | Christopher s. Payton | [email protected] |
|. 1 | Panna | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Jak widać z powyższej tabeli, mamy dwie zduplikowane wartości, które zwiększają bazę danych bez powodu i powodują zwolnienie.

Dowiedzmy się teraz, jak możemy usunąć te wartości.

#1 - Usuń dołącz

Jednym ze sposobów usunięcia zduplikowanych wierszy w bazie danych jest użycie instrukcji łączenia MySQL Delete. Zapytanie używa jednak identyfikatorów do usuwania zduplikowanych wartości.

Na przykład, aby usunąć zduplikowane wartości w powyższej tabeli użytkowników, możemy wprowadzić:

Usuń Tabela 1 z Użytkowników Tabela 1 Wewnętrzne użytkownicy Tabela 2, gdzie Tabela 1.ID < table2.id AND table1.email = table2.email;

Po wykonaniu powyższego zapytania usuniesz duplikat wartości, jak pokazano na poniższym wyjściu:

MySQL> Usuń TABELA1 Z Użytkowników Tabela 1 Wewnętrzna dołącz użytkownicy Tabela 2, gdzie Tabela 1.ID < table2.id AND table1.email = table2.email;
Zapytanie OK, 2 rzędy dotknięte (0.01 s)
Mysql> Wybierz * Z użytkowników Zamów według nazwy użytkownika;
+----+------------+-----------------------+-----------------------+
|. Id | Nazwa użytkownika | Full_name | E -mail |
+----+------------+-----------------------+-----------------------+
|. 8 | Artemis | Wesley c. Dillard | [email protected] |
|. 6 | Darkmatter | Patricia J. Fox | [email protected] |
|. 2 | pulsa | Tiffany g. Bailey | muś[email protected] |
|. 5 | PWNC | Faye h. Hartley | [email protected] |
|. 7 | Rakieta | Christopher s. Payton | [email protected] |
|. 1 | Panna | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

#2 - funkcja row_number ()

Drugą metodą, którą możemy zaimplementować, jest użycie funkcji mysql row_number (). Ta funkcja jest obsługiwana w wersji 8 i wyższej MySQL.

Działa poprzez przypisanie sekwencyjnej wartości INT do każdego wiersza, z wierszami zawierającymi duplikat wartości o wartości wyższej niż 1.

Aby dowiedzieć się więcej o tej funkcji, skorzystaj z zasobów podanych poniżej:

https: // dev.Mysql.com/doc/refman/8.0/en/okna-funkcja-czynność.HTML#Function_Row-numer

Rozważ poniższe zapytanie, które zwraca identyfikator wierszy z duplikatami:

Wybierz id ID z (wybierz id, row_number () over (partycja według kolejności nazwy użytkownika według nazwy użytkownika) jako row_var od użytkowników) t1 gdzie row_var> 1;

Po wykonaniu powyższego zapytania powinieneś uzyskać listę identyfikatorów, jak pokazano na poniższym wyjściu:

+----+
|. Id |
+----+
|. 6 |
|. 7 |
+----+
2 wiersze w zestawie (0.01 s)

Jeśli chcesz usunąć wartości, po prostu zastąp instrukcję SELECT na instrukcję Usuń, jak pokazano poniżej:

Usuń od użytkowników, gdzie identyfikator (wybierz ID z (wybierz id, Row_Number () Over (partycja według kolejności nazwy użytkownika) jako Row_Var od użytkowników) T1 gdzie Row_Var> 1);

Na koniec możesz sprawdzić, czy zduplikowane wartości są usuwane za pomocą instrukcji Select.

Mysql> Wybierz * Z użytkowników Zamów według nazwy użytkownika;
+----+------------+-----------------------+-----------------------+
|. Id | Nazwa użytkownika | Full_name | E -mail |
+----+------------+-----------------------+-----------------------+
|. 8 | Artemis | Wesley c. Dillard | [email protected] |
|. 4 | Darkmatter | Patricia J. Fox | [email protected] |
|. 2 | pulsa | Tiffany g. Bailey | muś[email protected] |
|. 5 | PWNC | Faye h. Hartley | [email protected] |
|. 3 | Rakieta | Christopher s. Payton | [email protected] |
|. 1 | Panna | Claude m. Mori | [email protected] |
+----+------------+-----------------------+-----------------------+

Wniosek

W tym samouczku omówiliśmy dwie metody usuwania duplikatów z bazy danych. Duże bazy danych, zwłaszcza te wspólne, mogą zawierać wiele zduplikowanych wartości z importu zewnętrznego i innych błędów. Dlatego istnieje potrzeba utrzymywania duplikatów, aby zapewnić optymalnie aplikacje.