นอกเหนือจากคะแนนในคำตอบอื่น ๆ นี่คือความแตกต่างที่สำคัญระหว่างสองข้อนี้
หมายเหตุ: ข้อความผิดพลาดมาจาก 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 ทุกรุ่น
รวมคอลัมน์
ดัชนีที่ไม่ได้เป็นคลัสเตอร์สามารถรวมคอลัมน์ที่ไม่ได้จัดทำดัชนี (เรียกว่าดัชนีครอบคลุมนี่คือการปรับปรุงประสิทธิภาพหลัก) ดัชนีที่อยู่เบื้องหลังข้อ จำกัด หลัก KEY และ UNIQUE ไม่สามารถรวมคอลัมน์ได้ Hat-tip @ypercube
กรอง
ไม่สามารถกรองข้อ จำกัด ที่ไม่ซ้ำได้
สามารถกรองดัชนีที่ไม่ซ้ำใครได้
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
ข้อ จำกัด ของกุญแจต่างประเทศ
ข้อ จำกัด ของ Foreign Key ไม่สามารถอ้างอิงดัชนีเฉพาะที่กรองได้ แต่สามารถอ้างอิงดัชนีเฉพาะที่ไม่ผ่านการกรองได้ (ฉันคิดว่าสิ่งนี้ถูกเพิ่มเข้ามาใน 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
) ;
เมื่อสร้างดัชนีคุณต้องระบุชื่อ
Hat-tip @ i-one
การเชื่อมโยง
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx