他の回答のポイントに加えて、2つの重要な違いを以下に示します。
注:エラーメッセージは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.
ただし、主キー制約または一意制約の背後にある一意のインデックスは、一意のインデックスと同様に無効にできます。Hat-tip 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で追加されたと思います)。
ネーミング
制約を作成するとき、制約名の指定はオプションです(5種類すべての制約)。名前を指定しない場合、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