Как указать уникальное ограничение для нескольких столбцов в MySQL?

У меня есть стол:

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

Теперь я хочу сделать колонны пользователь, электронная почта, адрес уникальный (вместе).

Как мне сделать это в MySql?

  • Конечно, пример просто … пример. Поэтому, пожалуйста, не беспокойтесь о семантике.

771

Решение

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

Другие решения

У меня есть таблица 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`)
);

и UNIQUE KEY работает так же, как и ожидалось, он допускает несколько пустых строк id_box_elements и id_router.

Я использую MySQL 5.1.42, поэтому, возможно, произошли некоторые изменения в проблеме, рассмотренной выше. К счастью, это работает и, надеюсь, так и останется.

202

Многостолбцовые уникальные индексы не работают в MySQL, если в строке указано значение NULL, поскольку MySQL рассматривает NULL как уникальное значение и, по крайней мере, в настоящее время не имеет логики для его обхода в многостолбечных индексах. Да, это безумное поведение, потому что оно ограничивает множество легитимных приложений многостолбцовых индексов, но это то, чем оно является … На данный момент это ошибка, которая была помечена как «не исправит» в MySQL. ошибка-трек …

44

Вы пробовали это?

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

Это работает для MySQL версии 5.5.32

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

Вы можете добавить несколько столбцов уникальных индексов через PhpMyAdmin. (Я тестировал в версии 4.0.4)

Перейдите к состав страница для вашей целевой таблицы. Добавьте уникальный индекс в один из столбцов. Разверните Индексы список в нижней части страницы структуры, чтобы увидеть уникальный индекс, который вы только что добавили. Щелкните значок редактирования, и в следующем диалоговом окне вы можете добавить дополнительные столбцы к этому уникальному индексу.

6

MySql 5 или выше ведет себя так (я только что проверил):

  • Вы можете определить уникальные ограничения, включающие обнуляемые столбцы. Допустим, вы определили уникальное ограничение (A, B), где A не обнуляется, а B
  • при оценке такого ограничения вы можете иметь (A, null) столько раз, сколько хотите (одно и то же значение A!)
  • Вы можете иметь только одну (A, не нулевую B) пару

Пример:
PRODUCT_NAME, PRODUCT_VERSION
«стекло», ноль
«стекло», ноль
‘вино’, 1

Теперь, если вы попытаетесь вставить (‘wine’ 1) снова, он сообщит о нарушении ограничения
Надеюсь это поможет

5

Я делаю это так:

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

Моя конвенция для уникального index_name является TableName_Column1_Column2_Column3_uindex,

2