Jak zapytanie MySQL obsługuje zduplikowane dane?Filtruj, aby usunąć zduplikowane zestawienie danych

MySQLJak zapytania obsługują zduplikowane dane?Filtruj, aby usunąć zduplikowane zestawienie danych

MySQL Obsługa duplikatów danych

W niektórych tabelach danych MySQL mogą występować zduplikowane rekordy.W niektórych przypadkach dopuszczamy istnienie zduplikowanych danych, ale czasami musimy również usunąć te zduplikowane dane.

W tym rozdziale przedstawimy, jak zapobiegać duplikowaniu danych w tabeli danych i jak usuwać zduplikowane dane w tabeli danych.


Zapobiegaj duplikowaniu danych w tabelach

Możesz ustawić określone pole w tabeli danych MySQL jako GŁÓWNY KLUCZ lub WYJĄTKOWY (wyjątkowy) Indeks zapewniający unikalność danych.

Wypróbujmy przykład: W poniższej tabeli nie ma indeksów ani kluczy podstawowych, więc tabela zezwala na wiele zduplikowanych rekordów.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

Jeśli chcesz ustawić pola imię i nazwisko w tabeli, dane nie mogą być powtarzane, możesz ustawić tryb podwójnego klucza głównego, aby ustawić unikalność danych.Jeśli ustawisz podwójny klucz główny, domyślną wartość tego klucza nie może mieć wartości NULL, ale można ją ustawić na NOT NULL.Następująco:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

Jeśli ustawimy unikalny indeks, to podczas wstawiania zduplikowanych danych instrukcja SQL nie zostanie pomyślnie wykonana i zgłosi błąd.

Różnica między INSERT IGNORE INTO i INSERT INTO polega na tym, że INSERT IGNORE ignoruje dane, które już istnieją w bazie danych.Jeśli w bazie danych nie ma żadnych danych, wstawi nowe dane, a jeśli są dane, pominie te dane.W ten sposób można zachować istniejące dane w bazie danych i osiągnąć cel wstawiania danych w lukę.

Poniższy przykład używa INSERT IGNORE INTO, który wykonuje się bez błędów i nie wstawia zduplikowanych danych do tabeli danych:

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERT IGNORE INTO Podczas wstawiania danych, po ustaleniu unikalności rekordu, jeśli wstawione zostaną zduplikowane dane, nie zostanie zwrócony błąd, a jedynie ostrzeżenie.I ZAMIEŃ NA, jeśli istnieje rekord podstawowy lub unikalny, najpierw go usuń.Wstaw nowy rekord.

Innym sposobem na ustawienie unikalności danych jest dodanie UNIKALNEGO indeksu, takiego jak ten:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Statystyki duplikują dane

Poniżej policzymy liczbę zduplikowanych rekordów imienia i nazwiska w tabeli:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

Powyższa instrukcja zapytania zwróci liczbę zduplikowanych rekordów w tabeli person_tbl.Ogólnie, aby wykonać zapytanie o zduplikowane wartości, wykonaj następujące czynności:

  • Określ, która kolumna zawiera możliwe zduplikowane wartości.
  • Użyj COUNT(*) na liście wyboru kolumny, aby wyświetlić te kolumny.
  • Kolumny wymienione w klauzuli GROUP BY.
  • Klauzula HAVING określa liczbę powtórzeń większą niż 1.

filtruj zduplikowane dane

Jeśli chcesz odczytać unikatowe dane, możesz użyć słowa kluczowego DISTINCT w instrukcji SELECT, aby odfiltrować zduplikowane dane.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

Możesz również użyć funkcji GROUP BY, aby odczytać unikalne dane z tabeli:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

deduplikuj dane

Jeśli chcesz usunąć zduplikowane dane w tabeli danych, możesz użyć następującej instrukcji SQL:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Oczywiście możesz również dodać INDEX (indeks) i PRIMAY KEY (klucz podstawowy) w tabeli danych, aby usunąć zduplikowane rekordy w tabeli.Metody jak poniżej:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

发表 评论

Twój adres e-mail nie zostanie opublikowany. 必填 项 已 用 * 标注

Przewiń do góry