Diğer cevaplardaki noktalara ek olarak, işte ikisi arasında bazı temel farklar.
Not: Hata mesajları SQL Server 2012'dendir.
Hatalar
Benzersiz bir kısıtlamanın ihlali 2627 numaralı hatayı döndürür.
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.
Benzersiz bir dizinin ihlali 2601 hatası veriyor.
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.
Devre Dışı Bırakma
Benzersiz bir kısıtlama devre dışı bırakılamaz.
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.
Ancak, bir birincil anahtar kısıtının veya benzersiz bir kısıtlamanın arkasındaki benzersiz dizin, herhangi bir benzersiz dizinin olduğu gibi devre dışı bırakılabilir. Şapkalı Brain2000.
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
Kümelenmiş bir dizini devre dışı bırakmanın verilere erişilemez hale getirdiğine dikkat edin.
Seçenekler
Benzersiz kısıtlamalar , FILLFACTOR
ve benzeri IGNORE_DUP_KEY
SQL Server sürümleri için geçerli olmamasına rağmen dizin oluşturma seçeneklerini destekler .
Dahil Edilen Sütunlar
Kümelenmemiş dizinler, dizine eklenmemiş sütunlar içerebilir (örtü endeksi olarak adlandırılır, bu büyük bir performans artışıdır). PRIMARY KEY ve UNIQUE kısıtlamalarının arkasındaki dizinler sütun içeremez. Hat-tip @ypercube.
süzme
Benzersiz bir kısıtlama filtrelenemez.
Benzersiz bir dizin filtrelenebilir.
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
Yabancı Anahtar Kısıtlamaları
Bir Yabancı Anahtar kısıtı, filtrelenmemiş benzersiz bir dizine referans veremez, ancak filtrelenmemiş benzersiz bir dizine başvurabilir (bunun SQL Server 2005'te eklendiğini düşünüyorum).
Adlandırma
Kısıtlama oluştururken, bir kısıtlama adı belirlemek isteğe bağlıdır (beş sınırlamanın tümü için). Bir ad belirtmezseniz, MSSQL sizin için bir tane oluşturur.
CREATE TABLE dbo.T1 (
TID int not null PRIMARY KEY
) ;
GO
CREATE TABLE dbo.T2 (
TID int not null CONSTRAINT T2_pk PRIMARY KEY
) ;
Dizin oluştururken bir ad belirtmeniz gerekir.
Hat-ucu @ i-bir.
Bağlantılar
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx