J'ai une table de base de données MySQL avec deux colonnes qui m'intéressent. Individuellement, ils peuvent chacun avoir des doublons, mais ils ne devraient jamais avoir un double des DEUX d'entre eux ayant la même valeur.
stone_id
peut avoir des doublons tant que pour chaque upsharge
titre est différent, et inversement. Mais disons par exemple stone_id
= 412 et upcharge_title
= "saphir" que la combinaison ne devrait se produire qu'une seule fois.
C'est acceptable:
stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "ruby"
Ce n'est PAS ok:
stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "sapphire"
Existe-t-il une requête qui trouvera des doublons dans les deux champs? Et si possible, y a-t-il un moyen de configurer ma base de données pour ne pas permettre cela?
J'utilise MySQL version 4.1.22
la source
J'ai trouvé utile d'ajouter un index unqiue en utilisant un "ALTER IGNORE" qui supprime les doublons et applique des enregistrements uniques qui sonne comme vous voudriez le faire. La syntaxe serait donc:
Cela ajoute effectivement la contrainte unique, ce qui signifie que vous n'aurez jamais d'enregistrements en double et que l'IGNORE supprime les doublons existants.
Vous pouvez en savoir plus sur ALTER IGNORE ici: http://mediakey.dk/~cc/mysql-remove-duplicate-entries/
Mise à jour: j'ai été informé par @Inquisitive que cela peut échouer dans les versions de MySql> 5.5:
Mise à jour -
ALTER IGNORE
Supprimé dans 5.7À partir des documents
L'un des développeurs MySQL propose deux alternatives :
INSERT IGNORE
, ex:Mais selon la taille de votre table, cela peut ne pas être pratique
la source
Vous pouvez trouver des doublons comme celui-ci.
la source
Pour trouver les doublons:
Pour éviter cela à l'avenir, créez une clé unique composite sur ces deux champs.
la source
Incidemment, une contrainte unique composite sur la table empêcherait cela de se produire en premier lieu.
(Ceci est T-SQL valide. Je ne suis pas sûr de MySQL.)
la source
ce post SO m'a aidé, mais moi aussi je voulais savoir comment supprimer et conserver l'une des lignes ... voici une solution PHP pour supprimer les lignes en double et en conserver une (dans mon cas, il n'y avait que 2 colonnes et c'est dans un pour effacer les associations de catégories en double)
la (limite NUM_DUPES - 1) est ce qui préserve la seule ligne ...
Merci a tous
la source
ALTER IGNORE TABLE table ADD UNIQUE INDEX index_name(stone_id, charge_title)
supprimera les lignes en double ne laissant qu'une seule paire unique.