Odpowiedzi:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
Mam tabelę 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`)
);
a UNIKALNY KLUCZ działa zgodnie z oczekiwaniami, pozwala na wiele NULL wierszy id_box_elements i id_router.
Korzystam z MySQL 5.1.42, więc prawdopodobnie pojawiła się aktualizacja omawianego wyżej problemu. Na szczęście działa i mam nadzieję, że tak pozostanie.
Wielokolumnowe unikalne indeksy nie działają w MySQL, jeśli masz wartość NULL w wierszu, ponieważ MySQL traktuje NULL jako unikalną wartość i przynajmniej obecnie nie ma logiki do obejścia go w indeksach wielokolumnowych. Tak, zachowanie jest szalone, ponieważ ogranicza wiele uzasadnionych aplikacji indeksów wielokolumnowych, ale takie właśnie jest ... Na razie jest to błąd, który został oznaczony jako „nie naprawi” na MySQL śledzenie błędów ...
ENGINE BDB
, i 2) jest to udokumentowane zachowanie, chociaż IMHO nie zostało wystarczająco udokumentowane zbyt jawnie, biorąc pod uwagę, jak zaskakujące / nieprzyjemne może być. Zobacz dyskusję na temat błędu MySQL 25544 bugs.mysql.com/bug.php?id=25544 .
Próbowałeś tego?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey` ( user
, email
, address
) `. Używam MYSQL w wersji 5.5.24 Możesz ustawić to nawet w PHPMYADMIN, jeśli go używasz. Używam wersji PMA 3.5.1.
Działa to dla mysql w wersji 5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5 lub nowszy zachowuje się tak (właśnie przetestowałem):
Przykład: PRODUCT_NAME, PRODUCT_VERSION „szkło”, zerowe „szkło”, zerowe „wino”, 1
Teraz, jeśli spróbujesz ponownie wstawić („wino” 1), zgłosi naruszenie zasad ograniczenia. Mam nadzieję, że to pomoże
Możesz dodać wiele kolumn unikalne indeksy poprzez phpMyAdmin . (Testowałem w wersji 4.0.4)
Przejdź do strony struktury tabeli docelowej. Dodaj unikalny indeks do jednej z kolumn. Rozwiń listę Indeksy na dole strony struktury, aby zobaczyć dodany właśnie unikalny indeks. Kliknij ikonę edycji, aw kolejnym oknie dialogowym możesz dodać dodatkowe kolumny do tego unikalnego indeksu.
Robię to tak:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Moja konwencja dotycząca wyjątkowego index_name
to TableName_Column1_Column2_Column3_uindex
.
Aby dodać unikalny indeks, wymagane są:
1) nazwa_tabeli
2) nazwa_indeksu
3) kolumny, do których chcesz dodać indeks
ALTER TABLE `tablename`
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);
W twoim przypadku możemy stworzyć unikalny indeks w następujący sposób:
ALTER TABLE `votes`ADD
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);
Jeśli tworzysz tabelę w mysql, użyj następujących poleceń:
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)
);
Najpierw pozbądź się istniejących duplikatów
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;
Następnie dodaj unikalne ograniczenie
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
Sprawdź ograniczenie za pomocą
SHOW CREATE TABLE votes;
Pamiętaj, że użytkownik, adres e-mail i adres będą uważane za niepowtarzalne, jeśli którykolwiek z nich ma w nim wartość zerową.
Dla PostgreSQL ... Nie działało to dla mnie z indeksem; dał mi błąd, więc zrobiłem to:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL nadał unikatowemu indeksowi własną nazwę. Myślę, że możesz zmienić nazwę indeksu w opcjach tabeli, jeśli trzeba ją zmienić ...