Question Comment puis-je spécifier une contrainte unique pour plusieurs colonnes dans MySQL?


J'ai une table

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

Maintenant, je veux faire les colonnes utilisateur, email, adresse unique (ensemble).

Comment est-ce que je fais ceci dans MySQL?

  • Bien sûr, l'exemple est juste ... un exemple. Alors, ne vous inquiétez pas pour la sémantique.

727
2018-03-11 19:12


origine


Réponses:


ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

1209
2018-03-11 19:14



J'ai une table MySQL:

CREATE TABLE `content_html` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_box_elements` int(11) DEFAULT NULL,
  `id_router` int(11) DEFAULT NULL,
  `content` mediumtext COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);

et la CLE UNIQUE fonctionne comme prévu, elle autorise plusieurs lignes NULL de id_box_elements et id_router.

Je cours MySQL 5.1.42, donc probablement il y avait une mise à jour sur le problème discuté ci-dessus. Heureusement, cela fonctionne et j'espère que cela restera comme ça.


186
2017-08-09 14:56



Les index uniques multi-colonnes ne fonctionnent pas dans MySQL si vous avez une valeur NULL dans la ligne car MySQL traite NULL comme une valeur unique et au moins n'a actuellement aucune logique pour contourner ce problème dans les index multi-colonnes. Oui, le comportement est fou, car il limite beaucoup d'applications légitimes d'index multi-colonnes, mais c'est ce qu'il est ... Pour l'instant, c'est un bug qui a été marqué "ne pas réparer" sur MySQL bug-track ...


42
2018-05-07 21:21



Avez-vous essayé cela?

UNIQUE KEY `thekey` (`user`,`email`,`address`)

21
2018-03-11 19:14



Cela fonctionne pour la version 5.5.32 de mysql

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

11
2018-01-02 19:00



Vous pouvez ajouter des index uniques à plusieurs colonnes via phpMyAdmin. (J'ai testé dans la version 4.0.4)

Naviguez vers le structure page pour votre tableau cible. Ajoutez un index unique à l'une des colonnes. Élargir la Index liste en bas de la page de structure pour voir l'index unique que vous venez d'ajouter. Cliquez sur l'icône d'édition et dans la boîte de dialogue suivante, vous pouvez ajouter des colonnes supplémentaires à cet index unique.


6
2018-03-20 00:40



MySql 5 ou supérieur se comporte comme ça (je viens de tester):

  • vous pouvez définir des contraintes uniques impliquant des colonnes nullables. Dites que vous définissez une contrainte unique (A, B) où A n'est pas Nullable mais B est
  • lors de l'évaluation d'une telle contrainte, vous pouvez avoir (A, null) autant de fois que vous voulez (même valeur A!)
  • vous ne pouvez avoir qu'une seule paire (A, non nulle B)

Exemple: PRODUCT_NAME, PRODUCT_VERSION 'verre', null 'verre', null «vin», 1

Maintenant, si vous essayez d'insérer à nouveau ('wine' 1), il signalera une violation de contrainte J'espère que cela t'aides


4
2017-08-03 12:56



Si vous voulez éviter les doublons à l'avenir. Créez une autre colonne dites id2.

UPDATE tablename SET id2 = id;

Maintenant, ajoutez l'unique sur deux colonnes:

alter table tablename add unique index(columnname, id2);

1
2018-03-09 13:04



Pour ajouter un suivi d'index unique sont requis:

1) nom_table
2) nom_index
3) les colonnes sur lesquelles vous souhaitez ajouter un index

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

Dans votre cas, nous pouvons créer un index unique comme suit:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

1
2017-07-10 08:22



Je le fais comme ceci:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

Ma convention pour un unique index_name est TableName_Column1_Column2_Column3_uindex.


0
2018-06-27 21:20