Comment la requête MySQL gère-t-elle les données en double ?Filtrer pour supprimer la déclaration de données en double

MySQLComment les requêtes gèrent-elles les données en double ?Filtrer pour supprimer la déclaration de données en double

MySQL Gestion des données en double

Il peut y avoir des enregistrements en double dans certaines tables de données MySQL. Dans certains cas, nous autorisons l'existence de données en double, 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 dans la table de données et comment supprimer les données en double dans la table de données.


Empêcher les données en double dans les tables

Vous pouvez définir le champ spécifié dans la table de données MySQL comme CLÉ PRIMAIRE ou UNIQUE (unique) Index pour assurer l'unicité des données.

Essayons un exemple : il n'y a pas d'index ni de clés primaires dans la table ci-dessous, la table autorise donc 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 first_name et last_name dans la table, 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 définissez la double clé primaire, la valeur par défaut de cette clé ne peut pas être NULL, mais peut être défini 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 définissons un index unique, lors de l'insertion de données en double, l'instruction SQL ne parviendra pas à s'exécuter correctement et générera une erreur.

La différence entre INSERT IGNORE INTO et INSERT INTO est que INSERT IGNORE ignore 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, il insère de nouvelles données, et s'il y a des données, il ignore ces données.De cette manière, les données existantes dans la base de données peuvent être préservées et l'objectif d'insertion de données dans l'espace peut être atteint.

L'exemple suivant utilise INSERT IGNORE INTO, qui s'exécute sans erreur et sans insérer de données en double 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, une fois l'unicité de l'enregistrement définie, si des données en double sont insérées, aucune erreur ne sera renvoyée, mais seul un avertissement sera renvoyé.Et REPLACE INTO dans s'il existe un enregistrement principal ou unique, supprimez-le d'abord.Insérez un nouvel enregistrement.

Une autre façon de définir l'unicité de vos données consiste à ajouter un index UNIQUE comme celui-ci :

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 en double

Ci-dessous, nous compterons le nombre d'enregistrements en double de first_name et last_name 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 d'éventuelles valeurs en double.
  • Utilisez COUNT(*) dans la liste de sélection de colonne pour répertorier ces colonnes.
  • Colonnes répertoriées dans la clause GROUP BY.
  • La clause HAVING définit 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;

Vous pouvez également utiliser GROUP BY pour lire des données uniques à partir d'une table :

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

dédupliquer les données

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, sex);
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) dans la table de données pour supprimer les enregistrements en double dans la table.Méthodes comme ci-dessous :

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

J'espère que le blog de Chen Weiliang ( https://www.chenweiliang.com/ ) partagé "Comment MySQL interroge-t-il et gère-t-il les données en double ?Déclarations de filtrage et de déduplication" vous aidera.

Bienvenue à partager le lien de cet article :https://www.chenweiliang.com/cwl-499.html

Bienvenue sur la chaîne Telegram du blog de Chen Weiliang pour obtenir les dernières mises à jour !

🔔 Soyez le premier à obtenir le précieux « Guide d'utilisation de l'outil d'IA de marketing de contenu ChatGPT » dans le répertoire supérieur de la chaîne ! 🌟
📚 Ce guide contient une valeur énorme, 🌟C'est une opportunité rare, ne la manquez pas ! ⏰⌛💨
Partagez et likez si vous aimez !
Vos partages et likes sont notre motivation continue !

 

发表 评论

Votre adresse email ne sera pas publiée. 项 已 用 * 标注

到 顶部