अन्य उत्तरों में अंकों के अलावा, यहाँ दोनों के बीच कुछ महत्वपूर्ण अंतर हैं।
नोट: त्रुटि संदेश SQL सर्वर 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.
लेकिन प्राथमिक कुंजी बाधा या एक अद्वितीय बाधा के पीछे अद्वितीय सूचकांक को किसी भी अद्वितीय सूचकांक के रूप में अक्षम किया जा सकता है। हैट-टिप ब्रेन २००।
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
सामान्य चेतावनी पर ध्यान दें कि क्लस्टर किए गए इंडेक्स को अक्षम करने से डेटा अप्राप्य हो जाता है।
विकल्प
अद्वितीय बाधाएँ अनुक्रमण विकल्पों को पसंद करती हैं FILLFACTOR
और जैसे IGNORE_DUP_KEY
कि, SQL सर्वर के हर संस्करण के लिए ऐसा नहीं है।
कॉलम शामिल हैं
गैर-अनुक्रमित सूचकांक में गैर-अनुक्रमित कॉलम (एक कवर इंडेक्स कहा जा सकता है, यह एक प्रमुख प्रदर्शन वृद्धि है) शामिल हो सकता है। प्राथमिक कुंजी और अद्वितीय बाधाओं के पीछे के सूचकांक में कॉलम शामिल नहीं हो सकते। हैट-टिप @ypercube।
छनन
एक अद्वितीय बाधा को फ़िल्टर नहीं किया जा सकता है।
एक अद्वितीय सूचकांक फ़िल्टर किया जा सकता है।
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
विदेशी कुंजी बाधाओं
एक विदेशी कुंजी बाधा एक फ़िल्टर किए गए अनन्य इंडेक्स का संदर्भ नहीं दे सकती है, हालांकि यह एक गैर-फ़िल्टर किए गए अनन्य इंडेक्स को संदर्भित कर सकता है (मुझे लगता है कि यह SQL सर्वर 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
) ;
इंडेक्स बनाते समय, आपको एक नाम निर्दिष्ट करना होगा।
हैट-टिप @ आई-वन।
लिंक
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx