Próbuję ustawić unikalne ograniczenie dla kombinacji kolumn, a nie dla pojedynczej kolumny. Mam tabelę „tagi”:
- id (int, PK, AI, bez znaku)
- tag (varchar 25)
- user_id (int, unsigned)
Po odpowiedzi na to pytanie, Próbowałem ustawić ograniczenie kombinacji za pomocą:
ALTER TABLE `tags` ADD UNIQUE `unique_tag_user_combo` (`tag`, `user_id`);
Jak na razie dobrze. Ale kiedy przychodzę go przetestować, sprawdzając, czy pozwoli mi wstawić ten sam tag dwa razy, ale z różnymi identyfikatorami użytkowników (to powinien), błędy:
INSERT INTO `tags` VALUES (NULL, "foo", "1"), (NULL, "foo", "2")
... rzuca ...
Duplicate entry "foo" for key "name_2"
Pamiętaj, że unikalne ograniczenie jest w zestawietag + user_id, więc moim zdaniem to zapytanie powinno działać poprawnie. Mógłbym zrozumieć ten błąd, gdybym próbował wstawić dwa razy foo / 1, ale nie foo / 1 i foo / 2. Czego mi brakuje?
(EDYCJA - także, o czym jest to odwołanie „nazwa_2” w komunikacie o błędzie? Nie mam kolumny o tej nazwie ...)
Odpowiedzi:
1 dla odpowiedzi № 1Możesz także mieć unikalny indeks na kolumnie znaczników
SHOW CREATE TABLE yourtb