2010-10-02 42 views
204

Khi nào tôi nên sử dụng KEY, PRIMARY KEY, UNIQUE KEYINDEX?Sự khác biệt giữa Khóa, Khóa chính, Khóa và Chỉ mục duy nhất trong MySQL

+1

Khóa CHÍNH là để xác định hàng, ngăn không cho chèn hai hàng có cùng dữ liệu giống nhau ... Phím INDEX để tăng tốc tìm kiếm (chèn chậm tối thiểu). Phím UNIQUE cho dữ liệu duy nhất trong một cột. –

+1

Hãy xem http://dba.stackexchange.com/questions/15572/differences-between-unique-key-and-primary-key/149580#149580. Và http://stackoverflow.com/questions/1401572/what-are-differences-between-index-vs-key-in-mysql/19345477#19345477 – Lijo

+0

Bản sao có thể có của [Sự khác nhau giữa INDEX, PRIMARY, UNIQUE, FULLTEXT trong MySQL ?] (https://stackoverflow.com/questions/707874/differences-between-index-primary-unique-fulltext-in-mysql) – thomasrutter

Trả lời

48

KEY và INDEX là từ đồng nghĩa.

Bạn nên thêm chỉ mục khi đo lường hiệu suất và GIẢI THÍCH cho bạn thấy rằng truy vấn không hiệu quả do chỉ mục bị thiếu. Việc thêm chỉ mục có thể cải thiện hiệu suất của các truy vấn (nhưng nó có thể làm chậm các sửa đổi đối với bảng).

Bạn nên sử dụng UNIQUE khi bạn muốn hạn chế các giá trị trong cột (hoặc cột) đó là duy nhất, do đó cố gắng chèn các giá trị trùng lặp sẽ dẫn đến lỗi.

KEY CHÍNH THỦ là một ràng buộc duy nhất và nó cũng ngụ ý rằng cột KHÔNG NULL. Nó được sử dụng để cung cấp cho một bản sắc cho mỗi hàng. Điều này có thể hữu ích khi tham gia với một bảng khác thông qua một ràng buộc khóa ngoài. Trong khi nó không được yêu cầu cho một bảng để có một chìa khóa PRIMARY nó thường là một ý tưởng tốt.

+0

PRIMARY KEY được sử dụng để đưa ra nhận dạng cho mỗi hàng? giải thích xin lỗi vì sự thiếu hiểu biết của tôi. – HELP

+0

@needHELP: Nó được sử dụng như một cách để xác định duy nhất bất kỳ hàng nào trong bảng của bạn. Ví dụ: nếu bạn muốn xóa một hàng cụ thể trong bảng của mình, thật hữu ích khi có một số cách để xác định rõ ràng nó để bạn không vô tình xóa hàng sai. Nó cũng hữu ích khi tham gia với một bảng khác vì nó được lập chỉ mục. –

253

KEYINDEX là các từ đồng nghĩa trong MySQL. Họ có ý nghĩa tương tự. Trong cơ sở dữ liệu bạn sẽ sử dụng indexes để cải thiện tốc độ truy xuất dữ liệu. Một chỉ mục thường được tạo trên các cột được sử dụng trong các mệnh đề JOIN, WHEREORDER BY.

Hãy tưởng tượng bạn có một bảng gọi là users và bạn muốn tìm kiếm tất cả người dùng có họ 'Smith'. Nếu không có chỉ mục, cơ sở dữ liệu sẽ phải trải qua tất cả các bản ghi của bảng: điều này là chậm, bởi vì bạn càng có nhiều bản ghi trong cơ sở dữ liệu của mình, càng có nhiều việc phải làm để tìm kết quả. Mặt khác, một chỉ mục sẽ giúp cơ sở dữ liệu bỏ qua nhanh chóng đến các trang có liên quan nơi các bản ghi 'Smith' được giữ. Điều này rất giống với cách chúng ta, con người, đi qua một thư mục danh bạ điện thoại để tìm một người nào đó bằng họ: Chúng ta không bắt đầu tìm kiếm qua thư mục từ bìa để che, miễn là chúng ta chèn thông tin theo thứ tự nào đó mà chúng ta có thể sử dụng để bỏ qua nhanh đến các trang 'S'.

Các khóa chính và các khóa duy nhất tương tự nhau. Khóa chính là một cột hoặc kết hợp các cột, có thể xác định duy nhất một hàng. Đây là trường hợp đặc biệt của unique key. Bảng có thể có nhiều nhất một khóa chính, nhưng nhiều hơn một khóa duy nhất. Khi bạn chỉ định một khóa duy nhất trên một cột, không có hai hàng riêng biệt nào trong một bảng có thể có cùng giá trị.

Cũng lưu ý rằng các cột được định nghĩa là khóa chính hoặc các khóa duy nhất được tự động lập chỉ mục trong MySQL.

+0

tôi có thể có cả khóa duy nhất và khóa chính có cùng giá trị không? – HELP

+0

@needHELP: Nó phụ thuộc. Bạn có nghĩa là trên các cột khác nhau? ... Bạn có thể cho một ví dụ? –

+0

cùng một cột và bảng – HELP

15

PRIMARY KEYUNIQUE KEY tương tự trừ trường hợp có các chức năng khác nhau. Khóa chính làm cho hàng của bảng duy nhất (nghĩa là, không thể có 2 hàng có cùng khóa chính xác). Bạn chỉ có thể có 1 khóa chính trong bảng cơ sở dữ liệu.

Phím duy nhất làm cho cột bảng trong một hàng của bảng duy nhất (nghĩa là, không có hàng trong bảng 2 có thể có cùng giá trị chính xác). Bạn có thể có nhiều hơn 1 cột bảng duy nhất (không giống như khóa chính có nghĩa là chỉ có 1 cột trong bảng là duy nhất).

INDEX cũng tạo ra tính độc đáo. MySQL (ví dụ) sẽ tạo một bảng chỉ mục cho cột được lập chỉ mục. Bằng cách này, sẽ dễ dàng hơn để truy xuất giá trị hàng của bảng khi truy vấn được truy vấn trên cột bảng được lập chỉ mục đó. Điểm bất lợi là nếu bạn làm nhiều việc cập nhật/xóa/tạo, MySQL phải quản lý các bảng lập chỉ mục (và đó có thể là một nút cổ chai hiệu năng).

Hy vọng điều này sẽ hữu ích.

+0

Ngoài ra, 'UNIQUE KEY' có thể là' NULL' nhưng 'PRIMARY KEY' không thể là' NULL'. – Rafay

10

Unique Keys: Các cột trong đó không có hai hàng cũng tương tự như

Primary Key: Bộ sưu tập của số lượng tối thiểu của các cột mà duy nhất có thể xác định tất cả các hàng trong một bảng (tức là không có hai hàng cũng tương tự như trong tất cả các cột cấu thành khóa chính). Có thể có nhiều hơn một khóa chính trong bảng. Nếu tồn tại một khóa duy nhất thì đó là khóa chính (không phải là "khóa chính") trong bảng. Nếu không tồn tại một khóa duy nhất thì nhiều hơn một giá trị cột sẽ được yêu cầu để xác định một hàng như (first_name, last_name, dad_name, mother_name) có thể trong một số bảng tạo thành khóa chính.

Chỉ mục: được sử dụng để tối ưu hóa các truy vấn. Nếu bạn sẽ tìm kiếm hoặc sắp xếp kết quả trên cơ sở một số cột nhiều lần (ví dụ: hầu hết mọi người sẽ tìm kiếm các sinh viên theo tên chứ không phải bằng số cuộn của họ) thì nó có thể được tối ưu hóa nếu các giá trị cột là tất cả " được lập chỉ mục "ví dụ với thuật toán cây nhị phân.

+0

Tôi nghĩ rằng bạn có nghĩa là để nói rằng có thể chỉ có một PK trong một bảng –

6

Khoá chính - chúng tôi chỉ có thể đặt một khóa chính trên bảng vào bảng và chúng tôi không thể để trống cột đó khi nhập giá trị vào bảng.

Khoá duy nhất - chúng tôi có thể đặt nhiều hơn một khóa duy nhất trên bàn và chúng tôi có thể để trống cột đó khi nhập các giá trị vào bảng. Cột lấy các giá trị duy nhất (không giống nhau) khi chúng tôi áp dụng khóa chính & duy nhất.

+0

bảng chỉ có một chìa khóa PRIMARY, nhưng phím duy nhất là nhiều hơn một. – VIKASH

37

Khóa chính không cho phép giá trị null nhưng khóa duy nhất cho phép giá trị null.

Chúng tôi chỉ có thể khai báo một khóa chính trong bảng nhưng bảng có thể có nhiều khóa duy nhất (gán cột).

4

Khóa chính được sử dụng để làm việc với các bảng khác nhau. Đây là nền tảng của cơ sở dữ liệu quan hệ. Nếu bạn có một cơ sở dữ liệu sách thì tốt hơn nên tạo 2 bảng - 1) sách và 2) tác giả với khóa chính "id". Sau đó, bạn sử dụng id trong sách thay vì tên tác giả.

Phím duy nhất được sử dụng nếu bạn không muốn có các mục lặp lại. Ví dụ: bạn có thể có tiêu đề trong bảng sách của mình và muốn đảm bảo chỉ có một mục nhập cho mỗi tên sách.

10

Cả khóa chính và khóa duy nhất được sử dụng để thực thi, tính duy nhất của một cột. Vì vậy, khi nào bạn chọn cái khác?

Một bảng có thể có, chỉ một khóa chính. Nếu bạn muốn thực thi tính duy nhất trên 2 hoặc nhiều cột, thì chúng tôi sử dụng ràng buộc khóa duy nhất.

Sự khác biệt giữa Ràng buộc khóa chính và Ràng buộc khóa duy nhất?

1. Một bảng có thể chỉ có một khóa chính, nhưng nhiều hơn một khóa

2. Tiểu học trọng điểm độc đáo không cho phép null, nơi quan trọng như là duy nhất cho phép một rỗng

+4

Trên thực tế trong MySQL một cột với một [contraint độc đáo cho phép nhiều hơn một 'NULL'] (http://stackoverflow.com/a/3712251/1326147), điều này là vô cùng hữu ích trong một số trường hợp. – Armfoot

1

Khóa duy nhất:

  1. Nhiều giá trị có thể rỗng.
  2. Không có hai bộ dữ liệu nào có thể có cùng giá trị trong khóa duy nhất.
  3. Một hoặc nhiều khóa duy nhất có thể được kết hợp để tạo thành khóa chính, nhưng không phải ngược lại.

Primary Key

  1. có thể chứa nhiều hơn một phím độc đáo.
  2. Biểu thị duy nhất một bộ tuple.
Các vấn đề liên quan