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?
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
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, elle 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 évoqué ci-dessus. Heureusement, cela fonctionne et j'espère que cela restera ainsi.
Les index uniques multi-colonnes ne fonctionnent pas dans MySQL si vous avez une valeur NULL dans la ligne, car MySQL considère NULL comme une valeur unique et au moins n’a actuellement aucune logique pour la contourner dans les index multi-colonnes. Oui, le comportement est insensé, 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 bogue qui a été marqué avec "ne résoudra pas" sur MySQL bug-track ...
Avez-vous essayé cela?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
Cela 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é dans 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 et dans la boîte de dialogue suivante, vous pouvez ajouter des colonnes supplémentaires à cet index unique.
MySql 5 ou supérieur se comporte comme ceci (je viens de tester):
Exemple: PRODUCT_NAME, PRODUCT_VERSION 'Glass', null 'Glass', null 'Wine', 1
Maintenant, si vous essayez d'insérer à nouveau ('vin' 1), une violation de contrainte sera signalée J'espère que cela vous aidera
Je le fais comme ça:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Ma convention pour un index_name
unique est TableName_Column1_Column2_Column3_uindex
.
Pour ajouter un index unique, les éléments suivants sont requis:
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 voulez é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);
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)
);