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:
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;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;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;# 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:
+----+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;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.