Comment mysql supprime les lignes en double

Comment mysql supprime les lignes en double
MySQL est un ensemble de données relationnel qui stocke les données dans des tables qui ont des lignes et des colonnes. Cependant, les données stockées dans la base de données peuvent contenir des valeurs en double causées par des erreurs dans les applications ou les utilisateurs.

Dans ce tutoriel, nous apprendrons à supprimer les lignes en double dans une base de données MySQL pour réduire la taille de la base de données et aider à augmenter les performances du serveur.

Avant de continuer, nous supposons:

  1. Vous avez installé MySQL et exécuté sur votre système
  2. Vous avez un accès root à la base de données.
  3. Vous avez accès à une base de données pour expérimenter ou tester

NOTE: Si vous avez besoin d'un exemple de base de données pour essayer les concepts fournis dans ce guide, veuillez considérer la base de données Sakila ou télécharger une copie de la base de données utilisée dans ce guide.

Des ressources sont fournies ci-dessous:

Utilisation de base

Avant de commencer, nous créerons intentionnellement un tableau contenant des valeurs en double à des fins de test. Les requêtes SQL pour effectuer cette action sont ci-dessous:

Utiliser le monde;
Déposez la table si existe des utilisateurs;
Créer des utilisateurs de table (id int touche primaire non null auto_increment, nom d'utilisateur varchar (10) pas null, full_name varchar (20), e-mail varchar (255) pas null);
Insérer dans les valeurs des utilisateurs (nom d'utilisateur, full_name, e-mail)
("Vierge", "Claude M. Mori "," Claude @ gmail.com "),
("Pulsa", "Tiffany G. Bailey "," Tiffany.g @ hotmail.com "),
("fusée", "Christopher S. Payton "," Chris.P @ LLC.io "),
("Darkmatter", "Patricia J. Fox "," Foxg @ Yahoo.com "),
("Pwnc", "Faye H. Hartley "," Hartley @ Outlook.com "),
("Darkmatter", "Patricia J. Fox "," Foxg @ Yahoo.com "),
("fusée", "Christopher S. Payton "," Chris.P @ LLC.io "),
("Artemis", "Wesley C. Dillard "," wes @ dillard.org ");

N'hésitez pas à modifier la requête ci-dessus pour répondre à vos besoins. Vous devez également vous assurer que la base de données (monde) a été créée pour éviter les erreurs.

Maintenant, si nous obtenons toutes les données à l'intérieur du tableau et dans l'ordre par nom d'utilisateur, nous verrons les doublons que nous avons comme indiqué:

mysql> Utiliser le monde;
La base de données modifiée
MySQL> SELECT * FROM Users Commandez par nom d'utilisateur;
+----+------------+-----------------------+-----------------------+
| ID | Nom d'utilisateur | full_name | Courriel |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley C. Dillard | Wes @ dillard.org |
| 4 | Darkmatter | Patricia J. Fox | FOXG @ YAHOO.com |
| 6 | Darkmatter | Patricia J. Fox | FOXG @ YAHOO.com |
| 2 | Pulsa | Tiffany G. Bailey | tiffany.g @ hotmail.com |
| 5 | PWNC | Faye H. Hartley | Hartley @ Outlook.com |
| 3 | fusée | Christopher S. Payton | Chris.P @ LLC.IO |
| 7 | fusée | Christopher S. Payton | Chris.P @ LLC.IO |
| 1 | Vierge | Claude m. Mori | Claude @ gmail.com |
+----+------------+-----------------------+-----------------------+

Comme vous pouvez le voir dans le tableau ci-dessus, nous avons deux valeurs en double qui rendent la base de données plus grande sans raison et provoquent des vitesses lents.

Laissez-nous maintenant comment nous pouvons supprimer ces valeurs.

# 1 - Supprimer la jointure

Une façon de supprimer les lignes en double dans une base de données est d'utiliser l'instruction MySQL Delete Join. La requête, cependant, utilise des ID pour supprimer les valeurs en double.

Par exemple, pour supprimer les valeurs en double dans le tableau des utilisateurs ci-dessus, nous pouvons saisir:

Supprimer le tableau 1 des utilisateurs Table1 Tableau de jointure intérieure Tableau 2 Where Table1.identifiant < table2.id AND table1.email = table2.email;

Une fois que vous avez exécuté la requête ci-dessus, vous supprimerez les valeurs en double comme indiqué dans la sortie ci-dessous:

MySQL> Supprimer le tableau 1 des utilisateurs Table1 Tableau de jointure intérieure Tableau 2 Where Table1.identifiant < table2.id AND table1.email = table2.email;
Requête ok, 2 rangées affectées (0.01 SEC)
MySQL> SELECT * FROM Users Commandez par nom d'utilisateur;
+----+------------+-----------------------+-----------------------+
| ID | Nom d'utilisateur | full_name | Courriel |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley C. Dillard | Wes @ dillard.org |
| 6 | Darkmatter | Patricia J. Fox | FOXG @ YAHOO.com |
| 2 | Pulsa | Tiffany G. Bailey | tiffany.g @ hotmail.com |
| 5 | PWNC | Faye H. Hartley | Hartley @ Outlook.com |
| 7 | fusée | Christopher S. Payton | Chris.P @ LLC.IO |
| 1 | Vierge | Claude m. Mori | Claude @ gmail.com |
+----+------------+-----------------------+-----------------------+

# 2 - Row_number () Fonction

La deuxième méthode que nous pouvons implémenter est d'utiliser MySQL ROW_NUMBER (). Cette fonction est prise en charge dans MySQL version 8 et supérieure.

Il fonctionne en attribuant une valeur int séquentielle à chaque ligne, avec des lignes contenant des valeurs en double obtenant une valeur supérieure à 1.

Pour en savoir plus sur cette fonction, utilisez la ressource fournie ci-dessous:

https: // dev.mysql.com / doc / Refman / 8.0 / EN / Window-Function-Descriptions.html # function_row-numéro

Considérez la requête ci-dessous qui renvoie l'ID des lignes avec des valeurs en double:

Sélectionnez ID FROM (SELECT ID, ROW_NUMBER () AUTOUR (partition par nom d'utilisateur par ordre d'utilisateur) comme ROW_VAR FROM Users) T1 WHERE ROW_VAR> 1;

Une fois que vous avez exécuté la requête ci-dessus, vous devriez obtenir la liste des ID comme indiqué dans la sortie ci-dessous:

+----+
| ID |
+----+
| 6 |
| 7 |
+----+
2 lignes en jeu (0.01 SEC)

Si vous souhaitez supprimer les valeurs, remplacez simplement l'instruction SELECT par l'instruction Delete comme indiqué ci-dessous:

Supprimer des utilisateurs où id dans (sélectionnez ID From (sélectionnez ID, ROW_NUMBER () sur (partition par commande de nom d'utilisateur par nom d'utilisateur) comme ROW_VAR à partir des utilisateurs) T1 WHERE ROW_VAR> 1);

Enfin, vous pouvez vérifier que les valeurs en double sont supprimées à l'aide de l'instruction SELECT.

MySQL> SELECT * FROM Users Commandez par nom d'utilisateur;
+----+------------+-----------------------+-----------------------+
| ID | Nom d'utilisateur | full_name | Courriel |
+----+------------+-----------------------+-----------------------+
| 8 | Artemis | Wesley C. Dillard | Wes @ dillard.org |
| 4 | Darkmatter | Patricia J. Fox | FOXG @ YAHOO.com |
| 2 | Pulsa | Tiffany G. Bailey | tiffany.g @ hotmail.com |
| 5 | PWNC | Faye H. Hartley | Hartley @ Outlook.com |
| 3 | fusée | Christopher S. Payton | Chris.P @ LLC.IO |
| 1 | Vierge | Claude m. Mori | Claude @ gmail.com |
+----+------------+-----------------------+-----------------------+

Conclusion

Dans ce tutoriel, nous avons discuté des deux méthodes de suppression des valeurs en double d'une base de données. Les grandes bases de données, en particulier celles à usage courant, peuvent contenir de nombreuses valeurs en double provenant d'importations externes et d'autres erreurs. Par conséquent, il est nécessaire de continuer à purger des valeurs en double pour s'assurer que les applications effectuent de manière optimale.