177 votes

MySQL - Rendre un champ existant unique

J'ai une table déjà existante avec un champ qui devrait être unique mais qui ne l'est pas. Je le sais seulement parce qu'une entrée dans la table avait la même valeur qu'une autre entrée, déjà existante, et cela a causé des problèmes.

Comment faire pour que ce champ n'accepte que des valeurs uniques ?

327voto

WuHoUnited Points 2601
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

Pour MySQL 5.7.4 ou plus :

ALTER TABLE mytbl ADD UNIQUE (columnName);

À partir de MySQL 5.7.4, la clause IGNORE pour ALTER TABLE est supprimée et son utilisation produit une erreur.

Veillez donc à supprimer d'abord les entrées en double, car le mot-clé IGNORE n'est plus pris en charge.

Référence

63 votes

+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Docs

1 votes

Existe-t-il un moyen de lui demander de supprimer des lignes en fonction d'un certain critère ? Ou bien devez-vous effectuer un prétraitement avant que la fonction de suppression des lignes ne soit activée ? ALTER pour y arriver.

0 votes

Je ne sais pas s'il y a un moyen de choisir celle à garder pendant cette requête. UNIQUE est l'une de ces choses qui auraient vraiment dû être faites lors de la création de la base de données.

40voto

Il suffit d'écrire cette requête dans votre db phpmyadmin.

ALTER TABLE TableName ADD UNIQUE (FieldName)

Eg : ALTER TABLE user ADD UNIQUE (email)

17voto

ypercube Points 62714

Si vous souhaitez également nommer la contrainte, utilisez ceci :

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

7voto

Zulan Points 1216

CREATE UNIQUE INDEX foo ON table_name (field_name)

Vous devez supprimer les valeurs en double sur cette colonne avant d'exécuter ce sql. Toute valeur dupliquée existante sur cette colonne vous conduira à erreur mysql 1062

2voto

user3772326 Points 18
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

est la bonne réponse

la partie insérée

INSERT IGNORE INTO mytable ....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X