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

StackOverflow https://stackoverflow.com/questions/635937

Вопрос

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

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

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

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

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

Решение

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

Другие советы

У меня есть таблица 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, поэтому, возможно, были какие-то обновления по обсуждаемой выше проблеме.К счастью, это работает и, надеюсь, так и останется.

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

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

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

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

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

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

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

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

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

Пример:Product_name, Product_version 'Glass', Null 'Glass', Null 'Wine', 1

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

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

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

Моя конвенция об уникальном index_name является TableName_Column1_Column2_Column3_uindex.

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

UPDATE tablename SET id2 = id;

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

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

Для добавления уникального индекса необходимо:

1) имя_таблицы
2) имя_индекса
3) столбцы, по которым вы хотите добавить индекс

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

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

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

Если вы создаете таблицу в MySQL, используйте следующее:

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)
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top