Maison > base de données > tutoriel mysql > le corps du texte

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

Linda Hamilton
Libérer: 2024-10-28 09:43:29
original
377 Les gens l'ont consulté

**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>
Copier après la connexion

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>
    Copier après la connexion
  2. Tronquer la table d'origine :

    <code class="sql">TRUNCATE TABLE mytable;</code>
    Copier après la connexion
  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>
    Copier après la connexion
  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>
    Copier après la connexion
  5. Supprimez la table temporaire :

    <code class="sql">DROP TABLE tmp_data;</code>
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!