Maison > base de données > tutoriel mysql > [Tutoriel MySQL] MySQL gère les données en double

[Tutoriel MySQL] MySQL gère les données en double

黄舟
Libérer: 2016-12-26 17:26:44
original
1295 Les gens l'ont consulté

MySQL gère les données en double

Certaines tables de données MySQL peuvent avoir des enregistrements en double. Dans certains cas, nous autorisons l'existence de données en double, mais nous devons parfois également supprimer ces données en double.

Dans ce chapitre, nous expliquerons comment empêcher les données en double d'apparaître dans le tableau de données et comment supprimer les données en double dans le tableau de données.

Empêcher les données en double d'apparaître dans la table

Vous pouvez définir le champ spécifié dans la table de données MySQL en tant qu'index PRIMARY KEY (clé primaire) ou UNIQUE (unique) pour garantir l'unicité de les données.


Essayons un exemple : il n'y a pas d'index ni de clés primaires dans le tableau suivant, donc le tableau autorise plusieurs enregistrements en double.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);
Copier après la connexion

Si vous souhaitez définir les champs prénom et nom dans le tableau, les données ne peuvent pas être répétées. Vous pouvez définir le mode de clé primaire double pour définir l'unicité des données si vous définissez un double. clé primaire, la valeur par défaut de cette clé ne peut pas être NULL et peut être définie sur NOT NULL. Comme indiqué ci-dessous :

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)
);
Copier après la connexion

Si nous définissons un index unique, lors de l'insertion de données en double, l'instruction SQL ne sera pas exécutée avec succès et une erreur sera générée.

La différence entre INSERT IGNORE INTO et INSERT INTO est que INSERT IGNORE ignorera les données qui existent déjà dans la base de données, s'il n'y a pas de données dans la base de données, de nouvelles données seront insérées. les données seront ignorées. De cette manière, les données existantes dans la base de données peuvent être conservées pour atteindre l'objectif d'insérer des données dans l'espace.

L'exemple suivant utilise INSERT IGNORE INTO. Il n'y aura aucune erreur après l'exécution et aucune donnée en double ne sera insérée dans 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)
Copier après la connexion

INSERT IGNORE INTO Lors de l'insertion de données, dans les paramètres Après avoir assuré l'unicité de l'enregistrement, si des données en double sont insérées, aucune erreur ne sera renvoyée, seul un avertissement sera renvoyé. Si REPLACE INTO existe dans des enregistrements avec le même primaire ou unique, ils seront d'abord supprimés. Insérez ensuite de nouveaux enregistrements.

Une autre façon de définir le caractère unique des données consiste à ajouter un index UNIQUE, comme indiqué ci-dessous :

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);
Copier après la connexion

Compter les données en double

Ci-dessous, nous compterons le prénom dans la table Le nombre d'enregistrements en double avec last_name :

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;
Copier après la connexion

L'instruction de requête ci-dessus renverra le nombre d'enregistrements en double dans la table person_tbl. En général, pour rechercher des valeurs en double, procédez comme suit :

Déterminez quelle colonne contient des valeurs qui peuvent être dupliquées.

Les colonnes répertoriées à l'aide de COUNT(*) dans la liste de sélection de colonnes.

Les colonnes répertoriées dans la clause GROUP BY.

La clause HAVING fixe le nombre de répétitions à supérieur à 1.

Filtrer les données en double

Si vous avez besoin de lire des données uniques, vous pouvez 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;
Copier après la connexion

Vous pouvez également utiliser GROUP BY pour lire les données non dupliquées dans la table de données :

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);
Copier après la connexion

Supprimer les données en double

Si vous souhaitez supprimer le table de données Pour les données en double dans la table 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;
Copier après la connexion

Bien sûr, vous pouvez également ajouter INDEX (index) et PRIMAY KEY (clé primaire) à la table de données dans un moyen simple de supprimer la table des enregistrements en double. La méthode est la suivante :

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);
Copier après la connexion

Ce qui précède est le contenu du [tutoriel mysql] MySQL traitant les données en double. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn). !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal