Maison  >  Article  >  base de données  >  **Pouvez-vous supprimer les enregistrements en double en modifiant un index existant en unique ou en en ajoutant un nouveau ?**

**Pouvez-vous supprimer les enregistrements en double en modifiant un index existant en unique ou en en ajoutant un nouveau ?**

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 09:43:29378parcourir

**Can You Remove Duplicate Records by Modifying an Existing Index to Unique or Adding a New One?**

Suppression des doublons avec un index unique

Dans le but d'éviter les enregistrements en double, une approche courante consiste à créer un index unique sur les colonnes de table pertinentes. Cependant, une erreur récente a abouti à la création d'un index normal, permettant aux doublons de persister dans une énorme table de 20 millions d'enregistrements.

Question : La modification de l'index existant pour qu'il soit unique ou l'ajout un nouvel index unique pour ces colonnes supprime les enregistrements en double, ou l'opération échouera-t-elle en raison d'entrées uniques existantes ?

Réponse :

Ajout d'un index unique avec IGNORE le modificateur supprimera les enregistrements en double :

<code class="sql">ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);</code>

Cependant, ce modificateur est obsolète dans MySQL 5.7.4 et versions ultérieures, ce qui entraîne une erreur. Pour contourner ce problème, les étapes suivantes peuvent être suivies :

  1. Créez une table temporaire pour contenir les données de la table d'origine :

    <code class="sql">CREATE TABLE tmp_data SELECT * FROM mytable;</code>
  2. Tronquer la table d'origine :

    <code class="sql">TRUNCATE TABLE mytable;</code>
  3. Créer l'index unique sur la table d'origine :

    <code class="sql">ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);</code>
  4. Copiez les données dans la table d'origine tout en ignorant les lignes en double :

    <code class="sql">INSERT IGNORE INTO mytable SELECT * from tmp_data;</code>
  5. Supprimez la table temporaire :

    <code class="sql">DROP TABLE tmp_data;</code>

Vous pouvez également ajouter un index unique sans le modificateur IGNORE, la requête échouerait avec l'erreur 1062 (clé en double).

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