Question

j'ai une table:

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

Je souhaite maintenant que les colonnes utilisateur, adresse de messagerie, adresse soient uniques (ensemble).

Comment puis-je faire cela dans MySql?

  • Bien sûr, l'exemple est juste ... un exemple. Alors, ne vous inquiétez pas pour la sémantique.
Était-ce utile?

La solution

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

Autres conseils

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 clé unique fonctionne comme prévu, il autorise plusieurs lignes NULL de id_box_elements et id_router.

J'utilise MySQL 5.1.42, donc il y a probablement eu des mises à jour sur le problème mentionné ci-dessus. Heureusement, cela fonctionne et j'espère que cela restera.

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 ne dispose actuellement pas de logique pour la contourner dans les index multi-colonnes. Oui, le comportement est insensé, car il limite de nombreuses applications légitimes d’index multi-colonnes, mais c’est ce qu’il est ... Pour l’instant, c’est un bogue qui porte la marque "ne corrigera pas". sur la piste de bogues MySQL ...

Avez-vous essayé cela?

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

Ceci fonctionne pour mysql version 5.5.32

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

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

Accédez à la page Structure de votre table cible. Ajoutez un index unique à l'une des colonnes. Développez la liste Indexes au bas de la page de structure pour afficher l'index unique que vous venez d'ajouter. Cliquez sur l'icône d'édition. Dans la boîte de dialogue suivante, vous pouvez ajouter des colonnes à cet index unique.

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

  • vous pouvez définir des contraintes uniques impliquant des colonnes nullables. Supposons que vous définissiez 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 le souhaitez (même valeur A!)
  • vous ne pouvez avoir qu’une seule paire (A, pas null B)

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

Maintenant, si vous essayez d'insérer à nouveau ('wine' 1), une violation de contrainte sera signalée. J'espère que cela aide

Je le fais comme ça:

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

Ma convention pour un nom_index unique est TableName_Column1_Column2_Column3_uindex .

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

UPDATE tablename SET id2 = id;

Ajoutez maintenant l'unique sur deux colonnes:

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

Pour ajouter un index unique, les éléments suivants sont obligatoires:

1) nom_table
2) nom_index
3) 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`);

Si vous créez une table dans mysql, utilisez ce qui suit:

create table package_template_mapping (
mapping_id  int(10) not null auto_increment  ,
template_id int(10) NOT NULL ,
package_id  int(10) NOT NULL ,
remark      varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top