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

У меня есть таблица:

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

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

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

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

Ответ 1

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

Ответ 2

У меня есть таблица 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 работает так, как ожидалось, он допускает несколько NULL строк id_box_elements и id_router.

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Вы можете добавить уникальные индексы с несколькими столбцами с помощью phpMyAdmin. (Я тестировал в версии 4.0.4)

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

Ответ 7

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

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

Пример: PRODUCT_NAME, PRODUCT_VERSION 'glass', null 'glass', null 'вино', 1

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

Ответ 8

Если вы хотите избежать дубликатов в будущем. Создайте еще один столбец, скажем, id2.

UPDATE tablename SET id2 = id;

Теперь добавьте уникальное значение в два столбца:

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

Ответ 9

Для добавления уникального индекса требуется следующее:

1) table_name
2) index_name
3) столбцы, на которые вы хотите добавить индекс

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

В вашем случае мы можем создать уникальный индекс следующим образом:

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

Ответ 10

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

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

Мое соглашение для уникального index_name - TableName_Column1_Column2_Column3_uindex.