Как указать уникальное ограничение для нескольких столбцов в MySQL?
-
10-07-2019 - |
Вопрос
У меня есть таблица:
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)
);