Ngoài những điểm trong các câu trả lời khác, đây là một số khác biệt chính giữa hai câu hỏi.
Lưu ý: Các thông báo lỗi là từ SQL Server 2012.
Lỗi
Vi phạm một ràng buộc duy nhất trả về lỗi 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.
Vi phạm một chỉ mục duy nhất trả về lỗi 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.
Vô hiệu hóa
Một ràng buộc duy nhất không thể bị vô hiệu hóa.
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.
Nhưng chỉ mục duy nhất đằng sau một ràng buộc khóa chính hoặc một ràng buộc duy nhất có thể bị vô hiệu hóa, như bất kỳ chỉ mục duy nhất nào. Mũ lưỡi trai Brain2000.
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
Lưu ý cảnh báo thông thường rằng việc vô hiệu hóa một chỉ mục được nhóm làm cho dữ liệu không thể truy cập được.
Tùy chọn
Các ràng buộc duy nhất hỗ trợ các tùy chọn lập chỉ mục như FILLFACTOR
và IGNORE_DUP_KEY
, mặc dù điều này không xảy ra đối với mọi phiên bản của SQL Server.
Cột bao gồm
Các chỉ mục không bao gồm có thể bao gồm các cột không được lập chỉ mục (được gọi là chỉ mục bao phủ, đây là một cải tiến hiệu suất chính). Các chỉ mục đằng sau các ràng buộc PRIMARY KEY và UNIITE không thể bao gồm các cột. Mũ lưỡi trai @ypercube.
Lọc
Một ràng buộc duy nhất không thể được lọc.
Một chỉ mục duy nhất có thể được lọc.
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
Ràng buộc khóa ngoại
Ràng buộc khóa ngoài không thể tham chiếu một chỉ mục duy nhất được lọc, mặc dù nó có thể tham chiếu một chỉ mục duy nhất không được lọc (tôi nghĩ rằng điều này đã được thêm vào trong SQL Server 2005).
Đặt tên
Khi tạo ràng buộc, chỉ định tên ràng buộc là tùy chọn (cho tất cả năm loại ràng buộc). Nếu bạn không chỉ định tên thì MSSQL sẽ tạo một tên cho bạn.
CREATE TABLE dbo.T1 (
TID int not null PRIMARY KEY
) ;
GO
CREATE TABLE dbo.T2 (
TID int not null CONSTRAINT T2_pk PRIMARY KEY
) ;
Khi tạo chỉ mục, bạn phải chỉ định một tên.
Hat-tip @ i-one.
Liên kết
http://technet.microsoft.com/en-us/l Library / aa224827 (v = Vista.80) .aspx
http://technet.microsoft.com/en-us/l Library / ms177456.aspx