Latest web development tutorials

MySQL gère les données en double

Il peut y avoir quelques tables de données MySQL enregistrements en double, dans certains cas, nous laissons les données en double, mais parfois nous avons besoin de supprimer les données en double.

Ce chapitre, nous allons présenter comment prévenir la duplication des données de tableaux de données et comment supprimer les données en double dans le tableau de données.


Empêcher les données en double dans le tableau apparaît

Vous pouvez définir le champ spécifié dans les tableaux de données MySQL pour la clé primaire (clé primaire) ou UNIQUE (unique) index pour garantir l'unicité des données.

Prenons un exemple: sous la table sans index et les clés primaires, de sorte que la table permet à plusieurs enregistrements en double apparaissent.

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

Si vous souhaitez définir la table des champs prenom, les données last_name ne peuvent pas être répétées, vous pouvez configurer un mode bi-clé primaire pour définir la nature unique des données, si vous définissez une clé primaire double, la valeur par défaut de cette clé ne peut pas être NULL, peut être réglé sur NOT NULL. Comme suit:

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

Si nous avons établi un index unique, puis insérez les données en double, l'instruction SQL ne seront pas exécutées avec succès, et de jeter mal.

INSERT IGNORE EN différence est que, avec l'instruction INSERT INTO INSERT IGNORE ignorer les données qui existent déjà dans la base de données, si la base de données ne dispose pas de données, insérer les nouvelles données s'il y a des données, puis passez ces données. Alors que vous pouvez conserver les données existe déjà dans la base de données, pour atteindre l'objectif des données insérées dans l'espace.

L'exemple suivant utilise INSERT IGNORE EN, ne peut pas aller mal après la mise en œuvre, il ne sera pas insérer en double à la table de données:

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 EN Lors de l'insertion des données, après avoir défini le caractère unique de l'enregistrement, si vous insérez des données en double, ne reviendra pas une erreur, il renvoie uniquement comme un avertissement. Le REPLACE INTO dans le même enregistrement si la présence primaire ou unique, le premier supprimé. Ensuite, insérez un nouveau record.

Un autre ensemble de données est le seul moyen est d'ajouter un index UNIQUE, comme suit:

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

Statistiques dupliquer les données

Ci-dessous, nous allons répéter le numéro d'enregistrement de tables dans la first_name et last_name:

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

La requête ci-dessus retourne person_tbl dupliquer le nombre d'enregistrements dans la table. Dans des circonstances normales, la valeur des requêtes répétées, s'il vous plaît procédez comme suit:

  • Déterminer quelle colonne contient la valeur peut être répétée.
  • Dans la liste de sélection de colonne utilisation COUNT (*) ceux qui sont énumérés dans la colonne.
  • Les colonnes figurant dans la clause GROUP BY.
  • HAVING définit le nombre de répétitions est supérieur à 1.

Filtrer les données en double

Si vous avez besoin de lire les données uniques peuvent utiliser le mot-clé DISTINCT dans l'instruction SELECT pour filtrer les données en double.

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

Vous pouvez également utiliser GROUP BY pour lire les données dans le tableau n'a pas dupliquer les données:

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

déduplication

Si vous souhaitez supprimer les données en double dans le tableau de données, vous pouvez utiliser l'instruction SQL suivante:

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;

Bien sûr, vous pouvez également ajouter INDEX (index) et primay KEY (clé primaire) Cette méthode simple dans une table de données pour supprimer les doublons dans le tableau. Voici comment:

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