Oprócz punktów w innych odpowiedziach, oto kilka kluczowych różnic między nimi.
Uwaga: komunikaty o błędach pochodzą z SQL Server 2012.
Błędy
Naruszenie ograniczenia unikalnego zwraca błąd 2627.
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'P1U_pk'. Cannot insert duplicate key in object 'dbo.P1U'. The duplicate key value is (1).
The statement has been terminated.
Naruszenie unikalnego indeksu zwraca błąd 2601.
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object 'dbo.P1' with unique index 'P1_u'. The duplicate key value is (1).
The statement has been terminated.
Wyłączanie
Unikalne ograniczenie nie może zostać wyłączone.
Msg 11415, Level 16, State 1, Line 1
Object 'P1U_pk' cannot be disabled or enabled. This action applies only to foreign key and check constraints.
Msg 4916, Level 16, State 0, Line 1
Could not enable or disable the constraint. See previous errors.
Ale unikalny indeks stojący za ograniczeniem klucza podstawowego lub unikatowy może zostać wyłączony, podobnie jak każdy unikalny indeks. Kapelusz Brain2000.
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
Zwróć uwagę na zwykłe ostrzeżenie, że wyłączenie indeksu klastrowego powoduje, że dane są niedostępne.
Opcje
Unikalne ograniczenia obsługują opcje indeksowania takie jak FILLFACTOR
i IGNORE_DUP_KEY
, chociaż nie było tak w przypadku wszystkich wersji SQL Server.
Zawarte kolumny
Indeksy nieklastrowane mogą zawierać nieindeksowane kolumny (nazywane indeksem kryjącym, jest to znaczące zwiększenie wydajności). Indeksy za ograniczeniami PRIMARY KEY i UNIQUE nie mogą zawierać kolumn. Hat-tip @ypercube.
Filtracja
Ograniczenia unikatowego nie można filtrować.
Unikalny indeks można filtrować.
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
Ograniczenia klucza obcego
Ograniczenie klucza obcego nie może odwoływać się do przefiltrowanego indeksu unikalnego, chociaż może odwoływać się do niefiltrowanego indeksu unikalnego (myślę, że został on dodany w SQL Server 2005).
Nazewnictwo
Podczas tworzenia wiązania określenie nazwy wiązania jest opcjonalne (dla wszystkich pięciu typów wiązań). Jeśli nie podasz nazwy, MSSQL wygeneruje ją dla Ciebie.
CREATE TABLE dbo.T1 (
TID int not null PRIMARY KEY
) ;
GO
CREATE TABLE dbo.T2 (
TID int not null CONSTRAINT T2_pk PRIMARY KEY
) ;
Podczas tworzenia indeksów musisz podać nazwę.
Hat-tip @ i-one.
Spinki do mankietów
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx