Maison >base de données >tutoriel mysql >Comment puis-je supprimer efficacement les lignes en double dans MySQL tout en conservant un seul enregistrement ?

Comment puis-je supprimer efficacement les lignes en double dans MySQL tout en conservant un seul enregistrement ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 13:37:10694parcourir

How Can I Efficiently Delete Duplicate Rows in MySQL While Keeping One Record?

Guide de suppression des lignes en double MySQL : conserver efficacement les enregistrements uniques

Cet article explique comment supprimer les données en double d'une table MySQL et conserver un enregistrement de chaque ensemble de données en double. Bien qu'il soit possible de filtrer les valeurs uniques à l'aide de SELECT DISTINCT, cet article se concentre sur la façon d'y parvenir à l'aide de la commande DELETE.

Conseils importants :

Assurez-vous de sauvegarder vos tables avant d'effectuer toute opération de suppression afin d'éviter toute perte accidentelle de données.

Conservez le dossier avec le plus petit identifiant :

Pour conserver la ligne avec le plus petit ID parmi les doublons, exécutez l'instruction SQL suivante :

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name;</code>

Conservez le dossier avec le plus grand identifiant :

Pour conserver la ligne avec le plus grand ID parmi les doublons, exécutez l'instruction SQL suivante :

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name;</code>

Autres notes :

Avertissement d'efficacité :

La méthode ci-dessus n'est pas efficace et peut entraîner une surcharge de connexion à la base de données.

Exigences d'intégrité :

DOIT contenir la clause AND n1.id < n2.id (ou AND n1.id > n2.id). Ignorer cette condition peut entraîner la suppression de toutes les lignes du tableau.

Alternative :

Pour de meilleures performances, pensez à utiliser les requêtes INSERT et DISTINCT suivantes :

<code class="language-sql">INSERT INTO tempTableName (cellId, attributeId, entityRowId, value)
SELECT DISTINCT cellId, attributeId, entityRowId, value
FROM tableName;</code>

Vous pouvez ensuite supprimer la table d'origine et renommer la table temporaire. Cette méthode évite la suppression directe des données, améliorant ainsi l'efficacité et la sécurité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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