2010-03-16 45 views
7

Tuyên bố thuộc tính của một bảng là UNIQUE tương đương với việc khai báo nó là PRIMARY KEY?UNIQUE và PRIMARY KEY

cảm ơn rất nhiều!

Trả lời

8

Điểm khác biệt là: Khóa chính sẽ tạo chỉ mục nhóm theo mặc định và chỉ một PK có thể tồn tại trong một bảng. Khoá chính có thể bao gồm nhiều cột (khóa tổng hợp)

+5

Bạn có thể có các ràng buộc duy nhất bao trùm nhiều cột. – Thilo

4

Không có cả hai đều giống nhau nhưng tương tự nhau, khi cột là duy nhất nó có giá trị duy nhất nhưng nó cũng cho phép một giá trị Null trong cột đó, nhưng chính không cho phép bất kỳ giá trị null nào . Khóa chính có thể được sử dụng để tham khảo trong một số bảng khác.

Bạn có thể chỉ có một chìa khóa sơ cấp trong một bảng nhưng nhiều Unique chính

Khi bạn khai báo một hạn chế UNIQUE, SQL Server tạo ra một chỉ số UNIQUE để tăng tốc độ quá trình tìm kiếm bản sao. Trong trường hợp này, chỉ mục mặc định là chỉ mục NONCLUSTERED, vì bạn chỉ có thể có một chỉ mục CLUSTERED trên mỗi bảng.

  • Số lượng chỉ số UNIQUE trên mỗi bảng bị giới hạn bởi số chỉ mục trên bảng, chỉ số 249 NONCLUSTERED và chỉ số CLUSTERED có thể.

Trái với khóa CHÍNH THỨC Ràng buộc đơn nhất có thể chấp nhận NULL nhưng chỉ một lần. Nếu ràng buộc được định nghĩa trong một tổ hợp các trường, thì mỗi trường có thể chấp nhận NULL và có thể có một số giá trị trên chúng, miễn là các giá trị kết hợp là duy nhất.

Happy Coding !!!

+0

"UNIQUE ràng buộc có thể chấp nhận NULL nhưng chỉ một lần": Điều đó mâu thuẫn với những gì AvatarKava nói: UNIQUE phím có thể là NULL, và nhiều giá trị NULL được cho phép. Đó là cái nào? – Thilo

+2

Từ: http://dev.mysql.com/doc/refman/5.0/en/create-index.html Một chỉ mục UNIQUE tạo ra một ràng buộc sao cho tất cả các giá trị trong chỉ mục phải khác biệt. Một lỗi xảy ra nếu bạn cố gắng thêm hàng mới có giá trị khóa khớp với hàng hiện có. Ràng buộc này không áp dụng cho các giá trị NULL, ngoại trừ cho công cụ lưu trữ BDB.Đối với các công cụ khác, một chỉ số UNIQUE cho phép nhiều giá trị NULL cho các cột có thể chứa NULL. Nếu bạn chỉ định giá trị tiền tố cho một cột trong chỉ mục UNIQUE, các giá trị cột phải là duy nhất trong tiền tố. – AvatarKava

+1

Câu hỏi được gắn thẻ "mysql", nhưng tôi tin rằng Oracle cũng cho phép nhiều giá trị NULL (hai NULL không bao giờ được coi là bằng nhau). Đó dường như là quy ước tự nhiên hơn. – Thilo

0

Không. Tạo một cột là duy nhất rất khác với việc tạo một cột chính hoặc một phần của khóa chính.

13

Không.

KEY CHÍNH phải là UNIQUE, nhưng các phím UNIQUE không cần phải là chính. Bạn có thể có nhiều phím UNIQUE trong một bảng.

Sự khác biệt chính là các khóa PRIMARY không thể có giá trị NULL vì chúng phải xác định duy nhất một hàng. Các khóa UNIQUE có thể là NULL và nhiều giá trị NULL được cho phép (trừ khi bạn đang sử dụng một công cụ bảng không phổ biến như BDB).

+1

Ugh đó là một trò chơi khủng khiếp vô ý. – AvatarKava

+0

Tôi dường như nhớ lại việc cố gắng tạo một chỉ mục duy nhất trên một bảng và không thể vì nhiều giá trị NULL, nhưng tôi phải vấp ngã. – Duncan

+0

Có thể đã trở lại trong 4.x, Duncan - Tôi tin rằng họ đã có trở ngại đó sau đó: http://dev.mysql.com/doc/refman/5.0/en/create-index.html – AvatarKava

4

UNIQUE vẫn có thể là NULL.

PRIMARY KEY có nghĩa là UNIQUE và NOT NULL và chỉ có thể có một PRIMARY KEY cho mỗi bảng.

Các vấn đề liên quan