Dernier tutorie...login
Dernier tutoriel manuel MySQL
auteur:php.cn  temps de mise à jour:2022-04-15 14:04:12

MySQL gère les données en double


MySQL gère les données en double

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

Dans ce chapitre, nous présenterons 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 dans la table

Vous pouvez définir le champ spécifié dans la table de données MySQL comme PRIMARY KEY (clé primaire) ou UNIQUE (unique) index pour garantir l’unicité des 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)
);
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 double clé primaire pour définir l'unicité des données. Si vous configurez une 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)
);
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 s'il y en a. est des donné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)
INSERT IGNORE INTO Lors de l'insertion de données, set 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 de vos données est d'ajouter un index UNIQUE, comme ceci :

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

Compter les données en double

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

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;
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;
Vous pouvez également utiliser GROUP BY pour lire des données uniques dans la table de données :
mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name)

Supprimer les données en double

Si vous souhaitez supprimer 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;
Bien sûr, vous pouvez également l'ajouter dans la table de données INDEX (index) et PRIMAY KEY (clé primaire), ce moyen simple de supprimer les enregistrements en double dans la table. La méthode est la suivante :
mysql> ALTER IGNORE TABLE person_tbl 
   -> ADD PRIMARY KEY (last_name, first_name);

Tutoriels vidéo associés recommandés :

Site Web PHP chinois