Окрім пунктів в інших відповідях, ось деякі ключові відмінності між ними.
Примітка. Повідомлення про помилки надходять із SQL Server 2012.
Помилки
Порушення унікального обмеження повертає помилку 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.
Порушення унікального індексу повертає помилку 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.
Відключення
Унікальне обмеження неможливо відключити.
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.
Але унікальний індекс, що стоїть за обмеженням первинного ключа або унікальним обмеженням, може бути відключений, як і будь-який унікальний індекс. Шапочка Brain2000.
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
Зверніть увагу на звичайне попередження про те, що відключення кластерного індексу робить дані недоступними.
Параметри
Обмеження унікальності підтримують параметри індексування , як FILLFACTOR
і IGNORE_DUP_KEY
, хоча це не так для кожної версії SQL Server.
Включені стовпці
Некластеризовані індекси можуть включати неіндексовані стовпці (їх називають індексом покриття, це головне підвищення продуктивності). Індекси, що стоять за обмеженнями PRIMARY KEY та UNIQUE, не можуть включати стовпці. Шапка-наконечник @ypercube.
Фільтрування
Унікальне обмеження не може бути відфільтровано.
Унікальний індекс можна відфільтрувати.
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
Зовнішні ключові обмеження
Обмеження зовнішнього ключа не може посилатися на відфільтрований унікальний індекс, хоча він може посилатися на нефільтрований унікальний індекс (я думаю, це було додано в SQL Server 2005).
Іменування
Під час створення обмежень вказувати назву обмеження необов'язково (для всіх п’яти типів обмежень). Якщо ви не вкажете ім'я, MSSQL згенерує для вас.
CREATE TABLE dbo.T1 (
TID int not null PRIMARY KEY
) ;
GO
CREATE TABLE dbo.T2 (
TID int not null CONSTRAINT T2_pk PRIMARY KEY
) ;
Створюючи індекси, потрібно вказати ім’я.
Шапка-наконечник @ i-one.
Посилання
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx