Latest web development tutorials

MySQL gestisce i dati duplicati

Ci possono essere alcuni record duplicati tabella dati di MySQL, in alcuni casi, ci permettono di dati duplicati, ma a volte abbiamo bisogno di eliminare i dati duplicati.

In questo capitolo introdurremo come evitare la duplicazione dei dati di tabelle di dati e su come eliminare i dati duplicati nella tabella dei dati.


Impedire che i dati duplicati nella tabella appare

È possibile impostare il campo specificato in tabelle di dati di MySQL per la chiave primaria (chiave primaria) o indice univoco (unico) per assicurare l'unicità dei dati.

Proviamo un esempio: sotto il tavolo senza indici e chiavi primarie, in modo che la tabella consente appaiono più record duplicati.

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

Se si desidera impostare la tavola campi First_Name, i dati last_name non possono essere ripetuti, è possibile impostare una modalità chiave primaria doppio per impostare la natura unica dei dati, se si imposta una chiave primaria doppio, quindi il valore predefinito di tale chiave non può essere NULL, può essere impostato per NOT NULL. Come segue:

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)
);

Se abbiamo fissato un indice univoco, quindi inserire i dati duplicati, istruzione SQL non saranno eseguiti con successo, e gettare sbagliato.

INSERT INTO IGNORARE differenza è che con l'INSERT INTO INSERT IGNORE ignorare i dati che già esiste nel database, se il database non dispone di dati, inserire i nuovi dati se ci sono dati, quindi saltare questi dati. In modo che è possibile mantenere i dati già esiste nel database, per raggiungere lo scopo dei dati inseriti nella fessura.

L'esempio seguente utilizza INSERT IGNORE INTO, non si può sbagliare dopo l'attuazione, non inserirà duplicato la tabella di dati:

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 Quando si inseriscono i dati, dopo aver impostato l'unicità del record, se si inseriscono i dati duplicati, non restituirà un errore, restituisce solo come un avvertimento. Il REPLACE INTO nello stesso record se la presenza primaria o univoca, il primo eliminato. Quindi inserire un nuovo record.

Un'altra serie di dati è l'unico modo è quello di aggiungere un indice univoco, come segue:

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

Statistiche duplicare i dati

Di seguito ci sarà ripetere il numero record di tabelle nel first_name e cognome:

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

La query precedente restituirà person_tbl duplicare il numero di record nella tabella. In circostanze normali, il valore delle domande di ripetizione, eseguire le operazioni seguenti:

  • Determinare quale colonna contiene il valore può essere ripetuto.
  • Nel conteggio lista di selezione colonna uso (*) quelle che figurano nella colonna.
  • Colonne elencate nella clausola GROUP BY.
  • HAVING imposta il numero di ripetizioni è maggiore di 1.

Filtro dati duplicati

Se avete bisogno di leggere i dati univoci possono utilizzare la parola chiave DISTINCT nell'istruzione SELECT per filtrare i dati duplicati.

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

È inoltre possibile utilizzare GROUP BY per leggere i dati nella tabella non duplicare i dati:

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

deduplicazione

Se si desidera eliminare i dati duplicati nella tabella dei dati, è possibile utilizzare la seguente istruzione 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;

Naturalmente, è anche possibile aggiungere INDEX (indice) e primay KEY (chiave primaria) Questo semplice metodo in una tabella di dati per eliminare i record duplicati nella tabella. Ecco come:

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