Latest web development tutorials

MySQL obsługuje zduplikowanych danych

Mogą istnieć pewne dane MySQL zduplikowane rekordy, w niektórych przypadkach pozwalają zduplikowane dane, ale czasami musimy usunąć duplikaty danych.

W tym rozdziale będziemy wprowadzać jak uniknąć powielania danych z tabel danych i jak usunąć zduplikowane dane w tabeli danych.


Zapobiegać zduplikowane dane w tabeli pojawi się

Można ustawić danego pola w tabelach danych MySQL na klucz podstawowy (klucz podstawowy) lub UNIQUE (unikalne) indeksu w celu zapewnienia unikalności danych.

Spróbujmy przykład: pod stołem bez indeksów i kluczy podstawowych, tak że tabela pozwala pojawić wiele zduplikowanych rekordów.

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

Jeśli chcesz ustawić tabelę pola first_name dane LAST_NAME nie mogą się powtarzać, można skonfigurować podwójny tryb klucza podstawowego ustawić unikalny charakter danych, jeśli założyć podwójny klucz podstawowy, to wartość domyślna tego klucza nie może być NULL, można ustawić na NOT NULL. W następujący sposób:

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 stawiamy unikatowy indeks, a następnie włóż zduplikowanych danych, instrukcja SQL nie zostanie wykonane pomyślnie, i rzucać złe.

INSERT INTO IGNORE różnicą jest to, że z INSERT INSERT INTO Ignoruj ​​Ignoruj ​​dane, które już istnieje w bazie danych, jeśli baza danych nie posiada danych, wstawić nowe dane, jeśli nie ma danych, pomiń te dane. Tak, że można zachować dane już istnieje w bazie danych, aby osiągnąć cel danych umieszczonych w szczelinie.

W poniższym przykładzie użyto INSERT INTO IGNORE, nie może się nie udać po wdrożeniu, nie wstawi duplikatu 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 INTO IGNORE Podczas wstawiania danych, po ustawieniu wyjątkowość rekordu, jeśli wstawisz duplikatów danych, nie zwróci błąd, zwraca jedynie jako ostrzeżenie. REPLACE INTO do tego samego rekordu jeśli podstawowy lub unikatowy obecność, pierwsza usunięta. Następnie wstawić nowy rekord.

Inny zestaw danych jest jedynym sposobem jest dodanie indeksu UNIQUE, co następuje:

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 duplikować dane

Poniżej będziemy powtarzać rekordową liczbę stołów w first_name i last_name:

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

Powyższe zapytanie zwróci person_tbl powielać liczbę rekordów w tabeli. W normalnych okolicznościach, wartość powtarzających się pytań, proszę wykonać następujące czynności:

  • Ustal, która kolumna zawiera wartość ta może być powtórzona.
  • W liczbie lista użytkowania Wybór kolumny (*) wymienione w kolumnie.
  • Kolumny wymienione w klauzuli GROUP BY.
  • HAVING określa ilość powtórzeń jest większa niż 1.

Filtr powielone dane

Jeśli chcesz przeczytać unikatowych danych można użyć słowa kluczowego DISTINCT w instrukcji SELECT do filtrowania zduplikowanych danych.

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

Można również użyć GROUP BY, żeby odczytać dane w tabeli nie powiela dane:

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

deduplikacja

Jeśli chcesz usunąć zduplikowane dane w tabeli danych, można użyć następującą instrukcję SQL:

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

Oczywiście, można także dodać Index (indeks) i PRIMAY KEY (klucz podstawowy) Ten prosty sposób w tabeli danych, aby usunąć zduplikowane rekordy w tabeli. Oto jak to zrobić:

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