Latest web development tutorials

MySQL behandelt doppelte Daten

Es kann einige MySQL-Datentabelle doppelte Datensätze sein, in einigen Fällen wir doppelte Daten erlauben, aber manchmal müssen wir die doppelten Daten zu löschen.

In diesem Kapitel werden wir vorstellen, wie Daten doppelte Datentabellen zu vermeiden und wie Sie doppelte Daten in der Datentabelle zu löschen.


Vermeiden von doppelten Daten in der Tabelle erscheint

Sie können das angegebene Feld in MySQL Datentabellen für den Primärschlüssel (Primärschlüssel) oder UNIQUE (unique) Index gesetzt , die Einzigartigkeit der Daten zu gewährleisten.

Nehmen wir ein Beispiel versuchen: Unter der Tabelle ohne Indizes und Primärschlüssel, so dass die Tabelle erscheinen mehrere doppelte Datensätze ermöglicht.

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

Wenn Sie die Tabellenfelder first_name einstellen möchten, können last_name Daten nicht wiederholt werden, können Sie einen Dual-Primärschlüssel-Modus eingerichtet, um die einzigartige Natur der Daten festgelegt, wenn Sie einen Dual-Primärschlüssel einrichten, dann ist der Standardwert dieses Schlüssels nicht NULL sein kann, kann eingestellt werden, um NOT NULL. Wie folgt:

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

Wenn wir einen eindeutigen Index gesetzt, dann legen Sie doppelte Daten, werden SQL-Anweisung nicht erfolgreich ausgeführt werden, und falsch zu werfen.

INSERT INTO Differenz IGNORE ist, dass mit der INSERT INTO INSERT Daten IGNORE ignorieren, die bereits in der Datenbank vorhanden ist, wenn die Datenbank Daten nicht hat, neue Daten einfügen, wenn es Daten gibt, dann diese Daten zu überspringen. Damit Sie die Daten behalten kann existiert bereits in der Datenbank, den Zweck der Daten in den Spalt zu erreichen.

Im folgenden Beispiel wird INSERT INTO IGNORE kann nach der Umsetzung nicht schief gehen, wird es nicht Duplikat der Datentabelle einzufügen:

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 ignorieren, wenn Einfügen von Daten, nachdem die Einzigartigkeit der Rekord, wenn Sie doppelte Daten einfügen, wird keinen Fehler zurück, es gibt nur eine Warnung. Die REPLACE INTO in demselben Datensatz, wenn der primäre oder einzigartige Präsenz, die erste gelöscht. Dann legen Sie einen neuen Rekord.

Ein weiterer Satz von Daten ist der einzige Weg ist, einen eindeutigen Index hinzuzufügen, wie folgt:

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

Statistiken doppelte Daten

Im Folgenden die Rekordzahl von Tabellen in der first_name und last_name wiederholen:

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

Die obige Abfrage wird wieder person_tbl die Anzahl der Datensätze in der Tabelle duplizieren. Unter normalen Umständen tun der Wert von Wiederholungsanfragen wenden Sie sich bitte wie folgt vor:

  • Bestimmen Sie, welche Spalte enthält, kann der Wert wiederholt werden.
  • In der Spalte Auswahlliste Verwendung COUNT (*) in der Spalte aufgeführt.
  • Spalten aufgelistet in der GROUP BY-Klausel.
  • Klausel HAVING setzt die Anzahl von Wiederholungen größer als 1 ist.

Filter doppelte Daten

Wenn Sie die einzigartige Daten zu lesen möchten, können das Schlüsselwort DISTINCT in der SELECT-Anweisung verwenden, um doppelte Daten zu filtern.

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

Sie können auch GROUP BY verwenden, um die Daten in der Tabelle zu lesen keine Daten kopieren:

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

Deduplizierung

Wenn Sie doppelte Daten in der Datentabelle löschen möchten, können Sie die folgende SQL-Anweisung verwenden:

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;

Natürlich können Sie auch INDEX (Index) und PRIMAY KEY (Primärschlüssel) Diese einfache Methode in einer Datentabelle hinzufügen doppelte Datensätze in der Tabelle zu löschen. Hier ist, wie:

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