Ответ 1
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
У меня есть таблица:
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 или выше ведет себя так (я только что протестировал):
Пример: PRODUCT_NAME, PRODUCT_VERSION 'glass', null 'glass', null 'вино', 1
Теперь, если вы попытаетесь вставить ( "вино" 1) снова, он сообщит о нарушении ограничения Надеюсь, что это поможет
Если вы хотите избежать дубликатов в будущем. Создайте еще один столбец, скажем, id2.
UPDATE tablename SET id2 = id;
Теперь добавьте уникальное значение в два столбца:
alter table tablename add unique index(columnname, id2);
Для добавления уникального индекса требуется следующее:
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`);
Я делаю это так:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Мое соглашение для уникального index_name
- TableName_Column1_Column2_Column3_uindex
.