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