Klucz to zwykły indeks. Zbytnim uproszczeniem jest myślenie o tym jak o katalogu kartkowym w bibliotece. Wskazuje MySQL we właściwym kierunku.
Unikalny klucz jest również używany do poprawy szybkości wyszukiwania, ale ma ograniczenie polegające na tym, że nie może być zduplikowanych elementów (nie ma dwóch x i y, gdzie x nie jest y i x ==y).
Instrukcja wyjaśnia to w następujący sposób:
Indeks UNIQUE tworzy ograniczenie, tak że wszystkie wartości w indeksie muszą być różne. Jeśli spróbujesz dodać nowy wiersz z wartością klucza, która pasuje do istniejącego wiersza, wystąpi błąd. To ograniczenie nie dotyczy wartości NULL, z wyjątkiem mechanizmu przechowywania BDB. W przypadku innych aparatów indeks aUNIQUE zezwala na wiele wartości NULL dla kolumn, które mogą zawierać NULL. Jeśli określisz wartość prefiksu dla kolumny w indeksie UNIQUE, wartości kolumny muszą być unikatowe w obrębie prefiksu.
Klucz podstawowy jest „specjalnym” unikalnym kluczem. Zasadniczo jest to unikalny klucz, z wyjątkiem tego, że służy do identyfikacji czegoś.
Podręcznik wyjaśnia, jak ogólnie używane są indeksy:tutaj.
W MSSQL koncepcje są podobne. Istnieją indeksy, unikalne ograniczenia i klucze podstawowe.
Nie przetestowano, ale uważam, że odpowiednikiem MSSQL jest:
CREATE TABLE tmp (
id int NOT NULL PRIMARY KEY IDENTITY,
uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
name varchar(255) NOT NULL,
tag int NOT NULL DEFAULT 0,
description varchar(255),
);
CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);
Edycja:powyższy kod jest testowany pod kątem poprawności; jednak podejrzewam, że jest do tego znacznie lepsza składnia. Minęło trochę czasu, odkąd korzystałem z serwera SQL i najwyraźniej trochę zapomniałem :).