How do I specify unique constraint for multiple columns in MySQL? How do I specify unique constraint for multiple columns in MySQL? mysql mysql

How do I specify unique constraint for multiple columns in MySQL?


To add a unique constraint, you need to use two components:

ALTER TABLE - to change the table schema and,

ADD UNIQUE - to add the unique constraint.

You then can define your new unique key with the format 'name'('column1', 'column2'...)

So for your particular issue, you could use this command:

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


I have a MySQL table:

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`));

and the UNIQUE KEY works just as expected, it allows multiple NULL rows of id_box_elements and id_router.

I am running MySQL 5.1.42, so probably there was some update on the issue discussed above. Fortunately it works and hopefully it will stay that way.


Multi column unique indexes do not work in MySQL if you have a NULL value in row as MySQL treats NULL as a unique value and at least currently has no logic to work around it in multi-column indexes. Yes the behavior is insane, because it limits a lot of legitimate applications of multi-column indexes, but it is what it is... As of yet, it is a bug that has been stamped with "will not fix" on the MySQL bug-track...