sự khác biệt giữa khóa chính và khóa duy nhất


252

Tôi đang sử dụng cơ sở dữ liệu mysql. Tôi có một sự nhầm lẫn giữa khóa chính và khóa duy nhất.

Xin hãy giúp tôi nơi tôi nên tạo khóa chính và duy nhất. Ý tôi là trong trường hợp nào chúng ta tạo khóa duy nhất hoặc khóa chính.


9
wrt null-ability một cách tốt để phân biệt b / w chúng là PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
KNU

Câu trả lời:


233

Khóa chính:

  • Chỉ có thể có một khóa chính trong bảng
  • Trong một số DBMS không thể NULL- ví dụ: MySQL thêmNOT NULL
  • Khóa chính là định danh khóa duy nhất của bản ghi

Khóa duy nhất:

  • Có thể có nhiều hơn một khóa duy nhất trong một bảng
  • Khóa duy nhất có thể có NULLcác giá trị
  • Nó có thể là một khóa ứng cử viên
  • Khóa duy nhất có thể được NULL; nhiều hàng có thể có NULLcác giá trị và do đó có thể không được coi là "duy nhất"

11
Cũng muốn thêm vào khóa chính đó có thể được tạo trên nhiều cột, ví dụ: Khóa chính (CustomerID, ProductID). Đây được gọi là khóa chính tổng hợp. Điều này là để làm rõ điểm đầu tiên, vì nó có thể được thực hiện (đọc một khóa => một cột) bởi người mới đến sql :)
ken

1
Ý nghĩa của bạn về 'có thể là một khóa ứng cử viên' là gì?

1
"Chỉ một null duy nhất được phép" - điều này không đúng, ít nhất là không phải với MySQL.
Jāni Elmeris

69
Khóa duy nhất có thể là null và có thể không phải là Phương tiện duy nhất ??
Pratik

20
@PratikCJoshi Có lẽ ông có nghĩa là có thể có nhiều hàng với null trên khóa duy nhất khác.
John

77

Khóa duy nhất (Vương quốc Anh) : Đó là một cột hoặc một nhóm các cột có thể xác định tính duy nhất trong một hàng.

Khóa chính (PK) : Đây cũng là một cột hoặc một nhóm các cột có thể xác định tính duy nhất trong một hàng.

Vì vậy, Khóa chính chỉ là một tên khác cho khóa duy nhất, nhưng việc triển khai mặc định trong SQL Server khác với Khóa chính và Khóa duy nhất.

Theo mặc định:

  1. PK tạo ra một Chỉ mục cụm và Vương quốc Anh tạo ra một Chỉ mục không cụm.
  2. PK không phải là null, nhưng UK cho phép null (Lưu ý: Theo mặc định)
  3. Chỉ có thể có một và chỉ một PK trên một bảng, nhưng có thể có nhiều Vương quốc Anh
  4. Bạn có thể ghi đè việc thực hiện mặc định tùy theo nhu cầu của bạn.

Nó thực sự phụ thuộc vào mục tiêu của bạn là gì khi quyết định nên tạo Vương quốc Anh hay PK. Nó tương tự như "Nếu có một nhóm gồm ba người, vì vậy tất cả họ đều là đồng nghiệp, nhưng sẽ có một trong số họ sẽ là một cặp đồng nghiệp: PK và Vương quốc Anh có mối quan hệ tương tự.". Tôi sẽ đề nghị đọc bài viết này: Ví dụ được đưa ra bởi tác giả có vẻ không phù hợp, nhưng hãy cố gắng để có được một ý tưởng tổng thể.

http://tsqltips.blogspot.com/2012/06/difference-b between-unique-key-and.html


đọc khoảng 10 trang web, trong đó nói rằng, PK có thể chứa nhiều hơn một cột. Vậy thì làm thế nào có thể có một và chỉ một PK trên bàn?

@android Một PK có nhiều hơn một cột đóng vai trò là một cột duy nhất đối với tính duy nhất. Ít nhất trong PostgreSQL, điều này có nghĩa là một cột mới (có tên mặc định [table_name]_pkey) được thêm vào bảng (Tôi đã nghe điều này được gọi là khóa thay thế). Nguồn: postgresqltutorial.com/postgresql-primary-key Tôi mới biết tất cả những điều này vì vậy tôi đánh giá cao một poster hiểu biết hơn để chỉ ra những sắc thái tôi đã bỏ lỡ.
Poik

Được rồi, nó không phải là một cột. Tôi đọc sai. Đó là một chống chỉ định, không phải là một cột. Vẫn còn chỉ số cụm, nhưng nó qua hai cột thay vì một cột. Và mỗi cột trong đó không phải là khóa chính, thay vào đó, toàn bộ là một khóa chính. Vì vậy, không có nhiều hơn một PK trong những trường hợp này.
Poik

46

Đối với một tổ chức hoặc một doanh nghiệp, có rất nhiều thực thể vật lý (như con người, tài nguyên, máy móc, v.v.) và các thực thể ảo (Nhiệm vụ, giao dịch, hoạt động của họ). Thông thường, doanh nghiệp cần ghi lại và xử lý thông tin của các thực thể kinh doanh đó. Các thực thể kinh doanh này được xác định trong toàn bộ miền kinh doanh bằng Khóa.

Theo triển vọng RDBMS, Khóa (còn gọi là Khóa Ứng viên) là một giá trị hoặc tập hợp các giá trị xác định duy nhất một thực thể.

Đối với Bảng DB, có rất nhiều khóa tồn tại và có thể đủ điều kiện cho Khóa chính. Vì vậy, tất cả các khóa, khóa chính, khóa duy nhất, vv được gọi chung là Khóa Ứng viên. Tuy nhiên, DBA đã chọn một khóa từ khóa ứng viên để tìm kiếm các bản ghi được gọi là Khóa chính.

Sự khác biệt giữa Khóa chính và Khóa duy nhất

1. Hành vi: Khóa chính được sử dụng để xác định một hàng (bản ghi) trong bảng, trong khi đó Khóa duy nhất là để ngăn các giá trị trùng lặp trong một cột (ngoại trừ mục nhập null).

2. Lập chỉ mục: Theo mặc định, công cụ SQL tạo Chỉ mục cụm trên khóa chính nếu không tồn tại và Chỉ mục không phân cụm trên khóa duy nhất.

3. Nullability: Khóa chính không bao gồm các giá trị Null, trong khi khóa Unique có thể.

4. Sự tồn tại: Một bảng có thể có nhiều nhất một khóa chính, nhưng có thể có nhiều Khóa duy nhất.

5. Khả năng sửa đổi: Bạn không thể thay đổi hoặc xóa các giá trị chính, nhưng các giá trị khóa duy nhất có thể.

Để biết thêm thông tin và ví dụ:

http://dotnetmasterities.blogspot.in/2013/11/Microsoft-Query-Server-Training-Online-Learning-Class-Integrity-Constraint-PrimaryKey-Unique-Key_27.html


7
Ở điểm thứ 5, bạn nói rằng chúng tôi không thể thay đổi hoặc xóa các giá trị chính. chúng tôi chắc chắn có thể thay đổi các giá trị chính trong bảng bằng cách sử dụng câu lệnh cập nhật.
Kapil

3
@Kapil làm như vậy sẽ đánh bại toàn bộ mục đích sử dụng khóa chính.
Gokigooooks

2
chỉ mục được nhóm: các hàng được lưu trữ vật lý trên đĩa theo cùng thứ tự với chỉ mục
Duy Đặng

26

Khóa chính phải là duy nhất.

Khóa duy nhất không phải là khóa chính - xem khóa ứng viên .

Đó là, có thể có nhiều hơn một tổ hợp các cột trên một bảng có thể xác định duy nhất một hàng - chỉ một trong số chúng có thể được chọn làm khóa chính. Những người khác, mặc dù duy nhất là các khóa ứng cử viên.


17

Sự khác biệt giữa Khóa chính và Khóa duy nhất

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

Bạn có thể tìm thấy thông tin chi tiết từ:
http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-b Among-Primary-Key-and-Unique-Key.html


16

Khóa chính có ngữ nghĩa xác định hàng của cơ sở dữ liệu. Do đó, chỉ có thể có một khóa chính cho một bảng nhất định, trong khi có thể có nhiều khóa duy nhất.

Cũng vì lý do tương tự, khóa chính không thể là NULL (ít nhất là trong Oracle, không chắc chắn về các cơ sở dữ liệu khác)

Vì nó xác định hàng nên không bao giờ thay đổi. Thay đổi khóa chính bị ràng buộc để gây ra nỗi đau nghiêm trọng và có thể là sự nguyền rủa đời đời.

Do đó, trong hầu hết các trường hợp, bạn muốn có một số id nhân tạo cho khóa chính không được sử dụng cho bất cứ điều gì ngoài việc xác định các hàng đơn lẻ trong bảng.

Mặt khác, các phím duy nhất có thể thay đổi nhiều như bạn muốn.


22
+1 để đề cập đến nguy cơ chết tiệt vĩnh cửu. Đã đến lúc giới thiệu thần học vào lý thuyết cơ sở dữ liệu quan hệ.
Neville Kuyt

PK cũng không thể là NULL trong SQL Server
mrd3650

7

Khóa chính là khóa duy nhất.

Mỗi bảng phải có tối đa MỘT khóa chính nhưng nó có thể có nhiều khóa duy nhất. Khóa chính được sử dụng để xác định duy nhất một hàng của bảng. Khóa chính không thể là NULLNULLkhông phải là một giá trị.


6
  • Hãy nghĩ tên bảng là employe.
  • Khóa chính
  • Khóa chính không thể chấp nhận giá trị null. khóa chính thực thi tính duy nhất của một cột. Chúng ta chỉ có thể có một khóa Chính trong một bảng.
  • Khóa duy nhất
  • Khóa duy nhất có thể chấp nhận giá trị null. Khóa duy nhất cũng thực thi tính duy nhất của một cột. Bạn có thể nghĩ nếu khóa duy nhất chứa giá trị null thì tại sao nó có thể là duy nhất? có, mặc dù nó có thể chấp nhận các giá trị null nhưng nó thực thi tính duy nhất của một cột. chỉ cần nhìn vào hình ảnh. Ở đây Emp_ID là chính và ID công dân là duy nhất. Mong là bạn hiểu. Chúng ta có thể sử dụng nhiều khóa duy nhất trong một bảng. nhập mô tả hình ảnh ở đây

1
chúng tôi không thể chèn nhiều hơn một giá trị null vào Khóa duy nhất và nó cũng sẽ không cho phép trùng lặp.
Masum

@ mahedi-hasan Không phải cột khóa duy nhất chỉ có một giá trị NULL? Làm thế nào đến hai hàng cuối cùng trong Citizen ID NULL? Am i thiếu cái gì ở đây?
siêu tân tinh

Chỉ cần có câu trả lời cho nhận xét của riêng tôi ở trên. Có vẻ như MySQL cho phép nhiều NULL độc đáo cũng giống như @Mahedi_Hasan đã sử dụng MySQL. stackoverflow.com/questions/3712222/ trộm
siêu tân tinh

6

Tôi biết câu hỏi này đã được vài năm tuổi nhưng tôi muốn đưa ra câu trả lời cho việc này giải thích tại sao hơn là làm thế nào

Mục đích của khóa chính : Để xác định một hàng trong cơ sở dữ liệu duy nhất => Một hàng đại diện cho một thể hiện duy nhất của loại thực thể được mô hình hóa bởi bảng. Khóa chính thực thi tính toàn vẹn của một thực thể, Tính toàn vẹn thực thể AKA. Khóa chính sẽ là một chỉ mục được nhóm, tức là nó xác định thứ tự mà dữ liệu được lưu trữ vật lý trong một bảng.

Mục đích của Khóa duy nhất : Ok, với Khóa chính, chúng ta có một cách để xác định duy nhất một hàng. Nhưng tôi có một nhu cầu kinh doanh như vậy, một cột khác / một tập hợp các cột nên có các giá trị duy nhất. Vâng, về mặt kỹ thuật, cho rằng (các) cột này là duy nhất, nó có thể là một ứng cử viên để thực thi tính toàn vẹn thực thể. Nhưng đối với tất cả những gì chúng ta biết, cột này có thể chứa dữ liệu có nguồn gốc từ một tổ chức bên ngoài mà tôi có thể nghi ngờ về tính duy nhất. Tôi có thể không tin tưởng nó để cung cấp tính toàn vẹn thực thể. Tôi chỉ làm cho nó một chìa khóa duy nhất để đáp ứng yêu cầu kinh doanh của tôi.

Có bạn đi!


1

Nếu thiết kế cơ sở dữ liệu của bạn sao cho không cần khóa ngoại, thì bạn có thể sử dụng khóa Unique ( nhưng hãy nhớ khóa duy nhất cho phép giá trị null đơn ).

Nếu cơ sở dữ liệu của bạn yêu cầu khóa ngoại thì bạn không có lựa chọn nào khác với khóa chính.

Để xem sự khác biệt giữa khóa duy nhất và khóa chính, hãy truy cập vào đây


1

Khóa duy nhất: - Nên sử dụng khi bạn phải cung cấp giá trị duy nhất. Trong trường hợp khóa duy nhất, điều đó có nghĩa là các giá trị null cũng được cho phép. Các khóa đơn là các khóa duy nhất và không giống nhau trong cột đó, ví dụ như tên thú cưng của bạn .it có thể không có gì giống như null và nếu bạn đang hỏi trong ngữ cảnh của cơ sở dữ liệu thì phải lưu ý rằng mọi null đều khác với null khác trong cơ sở dữ liệu. Máy chủ EXCEPT-SQL trong đó null = null là đúng


Khóa chính: - Nó nên được sử dụng khi bạn phải xác định duy nhất một hàng.primary là khóa duy nhất cho mỗi hàng trong một ràng buộc cơ sở dữ liệu là nó không cho phép null trong đó. Vì vậy, bạn có thể đã thấy rằng cơ sở dữ liệu có một cột là tự động tăng và nó là khóa chính của bảng. cộng với nó có thể được sử dụng làm khóa ngoại trong bảng khác. Ví dụ có thể là orderId trên Bảng đơn hàng , billId trong Bảng hóa đơn .

bây giờ trở lại tình huống khi sử dụng nó: -

1) khóa chính trong cột không thể rỗng trong bảng và bạn đang sử dụng làm khóa ngoại trong bảng khác để tạo mối quan hệ

2) khóa duy nhất trong bảng nơi nó không ảnh hưởng trong bảng hoặc trong toàn bộ cơ sở dữ liệu cho dù bạn lấy null cho cột cụ thể như đồ ăn nhẹ trong nhà hàng, có thể bạn không ăn vặt trong nhà hàng


1

sự khác biệt giữa Khóa chính và Khóa duy nhất

Cả hai Primary keyUnique Keyđược sử dụng để xác định duy nhất một hàng trong bảng. Primary Keytạo một clustered indexcột trong khi a Unique creates an unclustered index of the column.

A Primary Keykhông cho phép NULL value, tuy nhiên a Unique Keykhông cho phép one NULL value.


0

Đơn giản chỉ cần Khóa chính là duy nhất và không thể rỗng, duy nhất có thể là null và có thể không phải là duy nhất.


"duy nhất có thể là null và có thể không phải là duy nhất". Có may not be uniquenghĩa là gì ở đây?
Yusuf Hassan

0

Khóa chính

Mục đích chính của khóa chính là cung cấp một phương tiện để xác định từng bản ghi trong bảng.

Khóa chính cung cấp một phương tiện để xác định hàng, sử dụng dữ liệu trong hàng. Khóa chính có thể dựa trên một hoặc nhiều cột, chẳng hạn như tên và họ; tuy nhiên, trong nhiều thiết kế, khóa chính là số được tạo tự động từ một cột định danh.

Khóa chính có các đặc điểm sau:

  1. Chỉ có thể có một khóa chính cho một bảng.
  2. Khóa chính bao gồm một hoặc nhiều cột.
  3. Khóa chính thực thi tính toàn vẹn thực thể của bảng.
  4. Tất cả các cột được xác định phải được xác định là KHÔNG NULL.
  5. Khóa chính xác định duy nhất một hàng.
  6. Các khóa chính dẫn đến các chỉ mục duy nhất CLUSTERED theo mặc định.

Phím duy nhất

Một khóa duy nhất cũng được gọi là một ràng buộc duy nhất. Một ràng buộc duy nhất có thể được sử dụng để đảm bảo các hàng là duy nhất trong cơ sở dữ liệu.

Chúng ta đã làm điều đó với khóa chính chưa? Đúng, chúng tôi làm, nhưng một bảng có thể có một vài bộ cột mà bạn muốn duy nhất.

Trong SQL Server, khóa duy nhất có các đặc điểm sau:

  1. Có thể có nhiều khóa duy nhất được xác định trên một bảng.
  2. Các khóa duy nhất dẫn đến các chỉ mục duy nhất không bị phá hủy theo mặc định.
  3. Một hoặc nhiều cột tạo thành một khóa duy nhất.
  4. Cột có thể là NULL, nhưng trên một NULL cho mỗi cột được cho phép.
  5. Một ràng buộc duy nhất có thể được tham chiếu bởi ràng buộc khóa ngoài.

nguồn: tại đây


0

Các tính năng chính của khóa chính là:

Nó phải chứa một giá trị duy nhất cho mỗi hàng dữ liệu. Nó không thể chứa giá trị null. Chỉ có một khóa chính trong một bảng.

Các tính năng chính của khóa duy nhất là:

Nó cũng có thể chứa một giá trị duy nhất cho mỗi hàng dữ liệu.

Nó cũng có thể chứa các giá trị null.

Nhiều khóa duy nhất trong một bảng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.