У меня есть стол:
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 работает так же, как и ожидалось, он допускает несколько пустых строк 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 или выше ведет себя так (я только что проверил):
Пример:
PRODUCT_NAME, PRODUCT_VERSION
«стекло», ноль
«стекло», ноль
‘вино’, 1
Теперь, если вы попытаетесь вставить (‘wine’ 1) снова, он сообщит о нарушении ограничения
Надеюсь это поможет
Я делаю это так:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Моя конвенция для уникального index_name
является TableName_Column1_Column2_Column3_uindex
,