W języku SQL wykorzystywanym przez bazę danych MySQL atrybut UNIQUE polecenia CREATE TABLE
A. blokuje możliwość wpisania wartości NULL.
B. wymusza unikatowe nazwy pól tabeli.
C. jest stosowany, jeśli wartości w kolumnie nie mogą się powtarzać.
D. jest stosowany tylko w przypadku pól liczbowych.
Pytanie z egzaminu CKE, czerwiec 2017 (arkusz E.14-X-17.06).
Atrybut UNIQUE w poleceniu CREATE TABLE służy do nałożenia ograniczenia unikatowości na kolumnę albo zestaw kolumn. Oznacza to, że baza danych nie pozwoli wstawić dwóch rekordów z taką samą wartością w tym polu. Typowy przykład to adres e-mail użytkownika: email VARCHAR(255) UNIQUE. Dzięki temu dwa konta nie będą miały tego samego maila, co jest bardzo praktyczne przy logowaniu i odzyskiwaniu hasła. Moim zdaniem to jedno z tych ograniczeń, które warto zakładać już na poziomie bazy, a nie tylko sprawdzać w PHP czy JavaScript, bo baza jest ostatnią linią obrony spójności danych. UNIQUE może być użyte dla różnych typów danych, nie tylko liczbowych: tekstów, dat, identyfikatorów itp. Trzeba też pamiętać, że UNIQUE nie oznacza automatycznie NOT NULL. W MySQL kolumna z UNIQUE może przyjmować wartości NULL, a w wielu przypadkach nawet kilka razy, bo NULL oznacza brak znanej wartości. Jeśli pole ma być i unikatowe, i obowiązkowe, stosuje się razem UNIQUE oraz NOT NULL. To jest zgodne z dobrymi praktykami projektowania relacyjnych baz danych: reguły biznesowe, takie jak unikalny login, numer PESEL albo kod produktu, najlepiej zapisać jako ograniczenia w strukturze tabeli.
UNIQUE w MySQL nie służy do pilnowania nazw pól tabeli. Nazwy kolumn i tak muszą być rozróżnialne w obrębie jednej tabeli, ale jest to kwestia definicji struktury tabeli, a nie ograniczenia UNIQUE. Ten atrybut działa na wartości zapisywane w rekordach, czyli kontroluje dane, które trafiają do kolumny podczas INSERT lub UPDATE. Częsty błąd polega na tym, że ktoś widzi słowo unique i od razu kojarzy je z unikalną nazwą elementu, a w SQL chodzi tu o unikalność zawartości kolumny. UNIQUE nie blokuje też wartości NULL. Do tego jest osobne ograniczenie NOT NULL. W praktyce można mieć kolumnę email VARCHAR(255) UNIQUE, która nadal dopuszcza NULL, jeśli nie dopisze się NOT NULL. To drobny szczegół, ale na egzaminach i w prawdziwych projektach potrafi narobić zamieszania. Nie jest również prawdą, że UNIQUE stosuje się tylko do pól liczbowych. Ograniczenia unikatowości bardzo często zakłada się na polach tekstowych, na przykład login, slug artykułu, kod produktu albo adres e-mail. Można też tworzyć unikatowość złożoną, np. dla pary kolumn, gdy sama jedna kolumna może się powtarzać, ale kombinacja dwóch już nie. Sens UNIQUE jest więc taki: jeśli dana wartość w kolumnie lub zestawie kolumn nie powinna pojawić się drugi raz, baza ma to wymusić automatycznie. Z mojego doświadczenia lepiej powierzyć takie zasady silnikowi bazy danych, bo walidacja tylko w aplikacji bywa łatwa do ominięcia albo może zawieść przy równoczesnych zapisach.