Maison > base de données > tutoriel mysql > Comment supprimer les enregistrements en double dans MySQL sans utiliser de tables temporaires ?

Comment supprimer les enregistrements en double dans MySQL sans utiliser de tables temporaires ?

Patricia Arquette
Libérer: 2024-12-26 11:33:10
original
509 Les gens l'ont consulté

How to Delete Duplicate Records in MySQL Without Using Temporary Tables?

Suppression des enregistrements en double d'une table MySQL sans tables temporaires

Le maintien de l'intégrité des données dans une base de données MySQL est crucial, et la suppression des enregistrements en double est souvent une tâche nécessaire. De nombreuses solutions existent à ce problème, mais certaines peuvent impliquer l'utilisation de tables temporaires, qui peuvent être gourmandes en ressources. Cet article présente des méthodes alternatives pour supprimer les enregistrements en double sans recourir à des tables temporaires.

Utilisation d'un index unique

Si la table ne dispose pas d'une colonne de clé primaire, vous pouvez créer un index unique sur les colonnes qui identifient de manière unique un enregistrement. Dans ce cas, les colonnes member_id, quiz_num, question_num etanswer_num doivent constituer l'index unique. En ajoutant cet index, la base de données appliquera automatiquement l'unicité, empêchant ainsi l'insertion d'enregistrements en double à l'avenir.

ALTER IGNORE TABLE `TableA`
ADD UNIQUE INDEX (`member_id`, `quiz_num`, `question_num`, `answer_num`);
Copier après la connexion

Utilisation d'une clé primaire et d'une sous-requête

Vous pouvez également ajouter une clé primaire à la table et utiliser une sous-requête pour identifier et supprimer les enregistrements en double. Pour ajouter une clé primaire, exécutez la requête suivante :

ALTER TABLE `TableA`
ADD PRIMARY KEY (`id`);
Copier après la connexion

Une fois la clé primaire en place, vous pouvez utiliser la requête suivante pour supprimer les enregistrements en double :

DELETE FROM member
WHERE id IN (
  SELECT *
  FROM (
    SELECT id
    FROM member
    GROUP BY member_id, quiz_num, question_num, answer_num
    HAVING (COUNT(*) > 1)
  ) AS A
);
Copier après la connexion

Cette requête identifie d'abord les enregistrements en double à l'aide de la sous-requête, puis les supprime de la table. La colonne id est utilisée pour garantir qu'au moins un enregistrement est conservé pour chaque ensemble en double.

Choisir la méthode appropriée

Les deux méthodes suppriment efficacement les enregistrements en double sans tables temporaires . Le choix entre eux dépend des exigences spécifiques et de la structure du tableau. Si les insertions futures d’enregistrements en double posent problème, il est recommandé de créer un index unique. Sinon, l'utilisation d'une clé primaire et d'une sous-requête peut être une solution efficace pour supprimer les doublons une seule fois.

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