Selain poin dalam jawaban lain, berikut adalah beberapa perbedaan utama antara keduanya.
Catatan: Pesan kesalahan berasal dari SQL Server 2012.
Kesalahan
Pelanggaran galat pengembalian kendala unik 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.
Pelanggaran kesalahan pengembalian indeks unik 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.
Menonaktifkan
Batasan unik tidak dapat dinonaktifkan.
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.
Tetapi indeks unik di belakang batasan kunci primer atau batasan unik dapat dinonaktifkan, seperti halnya indeks unik apa pun. Hat-tip Brain2000.
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
Perhatikan peringatan biasa bahwa menonaktifkan indeks yang dikelompokkan membuat data tidak dapat diakses.
Pilihan
Kendala unik mendukung opsi pengindeksan seperti FILLFACTOR
dan IGNORE_DUP_KEY
, meskipun ini tidak berlaku untuk setiap versi SQL Server.
Termasuk Kolom
Indeks nonclustered dapat mencakup kolom yang tidak diindeks (disebut indeks penutup, ini adalah peningkatan kinerja utama). Indeks di balik kendala PRIMARY KEY dan UNIQUE tidak dapat menyertakan kolom. Hat-tip @ ypercube.
Penyaringan
Batasan unik tidak dapat difilter.
Indeks unik dapat difilter.
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
Batasan Kunci Asing
Batasan kunci asing tidak dapat referensi indeks unik difilter, meskipun itu dapat referensi indeks unik non-terfilter (saya pikir ini ditambahkan dalam SQL Server 2005).
Penamaan
Saat membuat kendala, menentukan nama kendala adalah opsional (untuk semua lima jenis kendala). Jika Anda tidak menentukan nama maka MSSQL akan menghasilkan satu untuk Anda.
CREATE TABLE dbo.T1 (
TID int not null PRIMARY KEY
) ;
GO
CREATE TABLE dbo.T2 (
TID int not null CONSTRAINT T2_pk PRIMARY KEY
) ;
Saat membuat indeks, Anda harus menentukan nama.
Hat-tip @ i-one.
Tautan
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx