Ответы:
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. ошибка-трек ...
ENGINE BDB
, и, 2) это документированное поведение, хотя, ИМХО, не документировано достаточно открыто, учитывая, насколько оно может быть удивительным / неприятным. См. MySQL bug 25544 bugs.mysql.com/bug.php?id=25544 для обсуждения.
Вы пробовали это?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey` ( user
, email
, address
) `. Я использую MYSQL версии 5.5.24. Вы можете установить это даже в PHPMYADMIN, если вы его используете. Я использую 3.5.1 версию PMA.
Это работает для MySQL версии 5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5 или выше ведет себя так (я только что проверил):
Пример: PRODUCT_NAME, PRODUCT_VERSION 'стекло', ноль 'стекло', ноль 'вино', 1
Теперь, если вы попытаетесь вставить ('wine' 1) снова, он сообщит о нарушении ограничения. Надеюсь, это поможет
Вы можете добавить уникальные индексы с несколькими столбцами через phpMyAdmin . (Я тестировал в версии 4.0.4)
Перейдите на страницу структуры для вашей целевой таблицы. Добавьте уникальный индекс в один из столбцов. Разверните список индексов внизу страницы структуры, чтобы увидеть уникальный индекс, который вы только что добавили. Щелкните значок редактирования, и в следующем диалоговом окне вы можете добавить дополнительные столбцы к этому уникальному индексу.
Я делаю это так:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Мое соглашение для уникального index_name
есть TableName_Column1_Column2_Column3_uindex
.
Для добавления уникального индекса необходимо следующее:
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`);
Если вы создаете таблицу в 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)
);
Сначала избавьтесь от существующих дубликатов
delete a from votes as a, votes as b where a.id < b.id
and a.user <=> b.user and a.email <=> b.email
and a.address <=> b.address;
Затем добавьте уникальное ограничение
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
Проверьте ограничение с
SHOW CREATE TABLE votes;
Обратите внимание, что пользователь, адрес электронной почты и адрес будут считаться уникальными, если любой из них имеет нулевое значение.
Для PostgreSQL ... У меня не работало с индексом; это дало мне ошибку, поэтому я сделал это:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL дал уникальному индексу собственное имя. Я думаю, вы можете изменить имя индекса в опциях для таблицы, если это необходимо изменить ...