тип - unique key mysql что это




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

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

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

Пример: PRODUCT_NAME, PRODUCT_VERSION 'glass', null 'glass', null 'wine', 1

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

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

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

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

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

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

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

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


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

1) имя_таблицы
2) index_name
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)
);

У меня есть таблица 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 ошибка-трек ...


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

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

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


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




database-table