Câu hỏi UNIQUE và PRIMARY KEY


Là tuyên bố một thuộc tính của một bảng như UNIQUE tương đương với tuyên bố nó như là chìa khóa PRIMARY?

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


7
2018-03-16 05:58


gốc




Các câu trả lời:


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


8
2018-03-16 06:02



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


Không.

PRIMARY KEY 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ó cá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).


14
2018-03-16 06:03



Ugh đó là một trò chơi khủng khiếp vô ý. - AvatarKava
Tôi dường như nhớ lại cố gắng để tạo ra một chỉ số 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
Có thể đã trở lại trong 4.x, Duncan - Tôi tin rằng họ đã có trở ngại đó sau đó: dev.mysql.com/doc/refman/5.0/en/create-index.html - AvatarKava


Không có cả hai đều không giống nhau nhưng là tương tự, khi một 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 tiểu học không cho phép bất kỳ giá trị null. Khóa chính có thể được sử dụng để tham khảo trong một số bảng khác.

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

Khi bạn khai báo một ràng buộc UNIQUE, SQL Server tạo ra một chỉ số UNIQUE để tăng tốc quá trình tìm kiếm các 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 các ràng buộc UNIQUE trên mỗi bảng bị giới hạn bởi số chỉ mục trên bảng, tức là chỉ số 249 NONCLUSTERED và một chỉ mục CLUSTERED có thể.

Trái với các ràng buộc UNIQUE PRIMARY chính 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 !!!


4
2018-03-16 06:02



"Các ràng buộc UNIQUE 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ì mà AvatarKava đã nói: Các khóa UNIQUE có thể là NULL và nhiều giá trị NULL được cho phép. Đó là cái nào? - Thilo
Từ: 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 nhau. 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
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
"Khóa chính có thể được sử dụng để tham khảo trong một số bảng khác" - sửa: UNIQUE có thể được sử dụng theo cùng một cách và cả hai UNIQUE và PRIMARY KEY có thể được sử dụng để tham chiếu trong cùng một bảng. - onedaywhen


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 trên mỗi bảng.


4
2018-03-16 06:03





Không .. Chúng không tương đương. Khóa duy nhất có thể có giá trị Null nhưng khóa chính không được phép có giá trị null. Đây là liên kết giải thích sự khác biệt http://sqlhints.com/2013/06/02/difference-between-primary-key-and-unique-key-in-sql-server/


1
2017-10-23 14:34





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.


0
2018-03-16 06:03