Neben den Punkten in anderen Antworten gibt es hier einige wesentliche Unterschiede zwischen den beiden.
Hinweis: Die Fehlermeldungen stammen aus SQL Server 2012.
Fehler
Die Verletzung einer eindeutigen Einschränkung gibt den Fehler 2627 zurück.
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.
Die Verletzung eines eindeutigen Index gibt den Fehler 2601 zurück.
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.
Deaktivieren
Eine eindeutige Einschränkung kann nicht deaktiviert werden.
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.
Der eindeutige Index hinter einer Primärschlüsseleinschränkung oder einer eindeutigen Einschränkung kann ebenso wie jeder eindeutige Index deaktiviert werden. Hutspitze Brain2000.
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
Beachten Sie die übliche Warnung, dass das Deaktivieren eines Clustered-Index die Daten unzugänglich macht.
Optionen
Einzigartige Einschränkungen unterstützen Indizierungsoptionen wie FILLFACTOR
und IGNORE_DUP_KEY
, obwohl dies nicht bei allen Versionen von SQL Server der Fall war.
Enthaltene Spalten
Nonclustered-Indizes können nicht indizierte Spalten enthalten (Covering-Index genannt, dies ist eine wesentliche Leistungsverbesserung). Die Indizes hinter den Einschränkungen PRIMARY KEY und UNIQUE dürfen keine Spalten enthalten. Hutspitze @ypercube.
Filtern
Eine eindeutige Einschränkung kann nicht gefiltert werden.
Ein eindeutiger Index kann gefiltert werden.
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
Fremdschlüsseleinschränkungen
Eine Fremdschlüsseleinschränkung kann nicht auf einen gefilterten eindeutigen Index verweisen, obwohl sie auf einen nicht gefilterten eindeutigen Index verweisen kann (ich denke, dies wurde in SQL Server 2005 hinzugefügt).
Benennung
Beim Erstellen einer Einschränkung ist die Angabe eines Einschränkungsnamens optional (für alle fünf Arten von Einschränkungen). Wenn Sie keinen Namen angeben, generiert MSSQL einen für Sie.
CREATE TABLE dbo.T1 (
TID int not null PRIMARY KEY
) ;
GO
CREATE TABLE dbo.T2 (
TID int not null CONSTRAINT T2_pk PRIMARY KEY
) ;
Beim Erstellen von Indizes müssen Sie einen Namen angeben.
Hutspitze @ i-one.
Links
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx