Các khoá chủ yếu và khóa nước ngoài là nhị loại buộc ràng hoàn toàn có thể được dùng nhằm thực ganh đua kiêm toàn tài liệu trong số bảng SQL Server và đó là những đối tượng người dùng hạ tầng tài liệu cần thiết.
Trong SQL Server, với nhị khóa - khóa chủ yếu và khoá nước ngoài nhượng bộ như tương tự nhau, tuy nhiên thực tiễn cả nhị đều không giống nhau về những chức năng và hành động. Các khoá chủ yếu và khóa nước ngoài là nhị loại buộc ràng hoàn toàn có thể được dùng nhằm thực ganh đua kiêm toàn tài liệu trong số bảng SQL Server và đó là những đối tượng người dùng hạ tầng tài liệu cần thiết.
Trong bài xích này, tôi mong muốn share sự khác lạ vị trí trung tâm khóa chủ yếu và khoá nước ngoài.
1. Khóa đó là gì
-
Khóa chủ yếu (hay buộc ràng khóa chính) được dùng nhằm lăm le danh độc nhất từng record nhập table của hạ tầng tài liệu.
-
Ngoài đi ra, nó còn dùng để làm thiết lập mối liên hệ 1-n (hay buộc ràng tham lam chiếu) thân mật nhị table nhập hạ tầng tài liệu.
-
Dữ liệu (value) của field khóa chủ yếu cần với tính độc nhất. Và ko chứa chấp những độ quý hiếm Null.
-
Mỗi table nên có thể với cùng 1 khóa chủ yếu, khóa chủ yếu hoàn toàn có thể tạo nên từ khá nhiều field của table.
2. Khóa nước ngoài là gì
-
Khóa nước ngoài của một table được coi như con cái trỏ trỏ cho tới khóa chủ yếu của table không giống.
-
Nếu ngôi trường MaSV của table DiemSV được dùng sẽ tạo buộc ràng tham lam chiếu cho tới table HSSV, trải qua khóa đó là MaSV thì MaSV của table DiemSV được gọi là khóa nước ngoài của bảng này. Đây cũng đó là nguyên do nhưng mà tớ phát biểu, khóa nước ngoài được coi như con cái trỏ trởi cho tới khóa chủ yếu.
-
Để nắm rõ rộng lớn về chân thành và ý nghĩa dùng của khóa chủ yếu, khóa nước ngoài tất cả chúng ta hãy xét ví dụ sau: Giả sử hạ tầng tài liệu QLDiemSV với nhị table: HSSV và DiemSV như sau:
-
Table HSSV bao gồm 6 field, nhập bại liệt MaSV được lựa chọn thực hiện khóa chủ yếu của table này.
- Table DiemSV bao gồm 6 field, nhập bại liệt STT là khóa chủ yếu và MaSV được lựa chọn thực hiện khóa nước ngoài của table này.
-
Như vậy, nhị table HSSV và DiemSV mối liên hệ tài liệu cùng nhau trải qua field MaSV của từng table (đây là mối liên hệ 1 – n). Hay phát biểu cách tiếp theo, buộc ràng tham lam chiếu đang được tạo nên thân mật nhị table (từ table DiemSV cho tới table HSSV).
-
Với buộc ràng này thì, việc người tiêu dùng vô tình hoặc cố ý đập diệt những links có khả năng sẽ bị ngăn ngừa. Và, người tiêu dùng cũng ko thể nhập nhập cột khóa nước ngoài một độ quý hiếm nhưng mà độ quý hiếm bại liệt ko xuất hiện tại ở cột khóa chủ yếu nhưng mà khóa này trỏ cho tới (không thể nhập điểm cho 1 SV, nhập table DiemSV, nhưng mà mã của mình ko xuất hiện tại ở cột MaSV ở table HSSV).
3. Thiết lập khóa chính
-
Để tạo nên khóa chủ yếu tức thì trong những khi tạo nên table tớ hoàn toàn có thể dùng câu mệnh lệnh SQL Create Table như sau:
( MaSV varchar (8) NOT NULL, Holot varchar(20), Ten varchar(8), NgaySinh Date, MaLop varchar(8) NOT NULL, Lienhe varchar(11) NOT NULL, PRIMARY KEY (MaSV) );
-
Câu mệnh lệnh này dùng để làm tạo nên table HSSV, bên cạnh đó hướng đẫn field MaSV thực hiện khóa chủ yếu cho tới nó.
-
Trong tình huống khóa chủ yếu được xây dựng từ khá nhiều field và tớ cần thiết gọi là cho tới buộc ràng khóa này thì hoàn toàn có thể dùng câu mệnh lệnh Create Table như sau:
( MaSV varchar (8) NOT NULL, Holot varchar(20), Ten varchar(8), NgaySinh DATE, MaLop varchar(8) NOT NULL, Lienhe varchar(11) NOT NULL, CONSTRAINT Ma PRIMARY KEY (MaSV, MaLop) );
-
Vậy khóa chủ yếu table này được xây dựng kể từ nhị field: MaSV và MaLop và thương hiệu của buộc ràng này là Ma.
3.1 Tạo khóa chủ yếu cho tới table đang được tạo
-
Sử dụng câu mệnh lệnh sau:
ALTER TABLE HSSV Showroom PRIMARY KEY (MaSV)
-
Hoặc:
ALTER TABLE HSSV Showroom CONSTRAINT Ma PRIMARY KEY (MaSV, MaLop)
-
Rõ ràng, nhập tình huống này những field MaSV, MaLop cần đang được khai báo buộc ràng NOT NULL (trng Khi tạo nên table).
3.2 Xóa khóa chính
-
Sử dụng câu mệnh lệnh sau:
ALTER TABLE HSSV DROP PRIMARY KEY;
-
Hoặc:
ALTER TABLE HSSV DROP CONSTRAINT Ma
4. Thiết lập khóa ngoại
-
Để tạo nên khóa nước ngoài tức thì trong những khi tạo nên table tớ hoàn toàn có thể dùng câu mệnh lệnh SQL Create Table như sau:
( STT INT NOT NULL AUTO_INCREMENT, MaSV varchar(8) NOT NULL, MonHoc varchar(6) NOT NULL, HKI, HKII, ĐTB_Nam INT, PRIMARY KEY (STT), FOREIGN KEY (MaSV) REFERENCES HSSV(MaSV) )
-
Câu mệnh lệnh này: Tạo table DiemSV bao gồm 6 field, nhập bại liệt khóa đó là field STT và field khóa nước ngoài là MaSV. Table này tạo nên buộc ràng tham lam chiếu cho tới table HSSV trải qua field MaSV.
-
Dạng khác:
( STT INT NOT NULL AUTO_INCREMENT, MaSV varchar(8) NOT NULL, MonHoc varchar(6) NOT NULL, HKI, HKII, ĐTB_Nam INT, PRIMARY KEY (STT), CONSTRAINT Ma FOREIGN KEY (MaSV) REFERENCES HSSV(MaSV) )
-
Khi cần thiết gọi là cho tới buộc ràng khóa nước ngoài và khóa nước ngoài được tạo hình từ khá nhiều field thì tớ cần dùng câu mệnh lệnh Create Table theo phương thức này.
4.1 Tạo khóa nước ngoài cho tới table đang được tạo
-
Ví dụ:
REFERENCES HSSV(MaSV)
-
Hoặc:
FOREIGN KEY (MaSV) REFERENCES HSSV(MaSV)
-
Câu mệnh lệnh này được dùng nhập tình huống cần thiết gọi là cho tới buộc ràng khóa nước ngoài và khóa nước ngoài được tạo hình từ khá nhiều field.
4.2 Xóa khóa ngoại
-
Ví dụ:
ALTER TABLE DiemSV DROP FOREIGN KEY Ma
-
Câu mệnh lệnh MySQL ALTER được dùng rất rất phổ cập trong số tình huống thay cho thay tên của table, thương hiệu của field hoặc thêm/xóa những field nhập một table nào là bại liệt. Vì vậy, tất cả chúng ta tiếp tục quay về câu mệnh lệnh này ở những bài xích sau.
5. Bảng ví sánh
Khóa chính | Khóa ngoại |
---|---|
Khóa đúng mực lăm le độc nhất một phiên bản ghi nhập bảng. | Khóa nước ngoài là một trong ngôi trường nhập bảng và là khóa chủ yếu nhập một bảng không giống. |
Khóa chủ yếu ko đồng ý những độ quý hiếm trống rỗng. | Khóa nước ngoài hoàn toàn có thể đồng ý nhiều độ quý hiếm trống rỗng. |
Theo đem lăm le, khoá đó là chỉ mục được group và tài liệu nhập bảng hạ tầng tài liệu được tổ chức triển khai theo đòi trật tự của mặt hàng chỉ mục group. | Khóa nước ngoài ko tự động hóa tạo nên một chỉ mục, group hoặc ko group. quý khách hoàn toàn có thể tự động tạo nên một chỉ mục bên trên khoá nước ngoài. |
Chúng tớ chỉ hoàn toàn có thể với cùng 1 khóa chủ yếu nhập một bảng. | Chúng tớ hoàn toàn có thể có tương đối nhiều khoá nước ngoài nhập một bảng. |
6. Tổng kết
-
Chúng tớ chỉ dùng những cơ hội bên trên sẽ tạo khóa chủ yếu nhập MySQL và không chỉ là với ở MySQL nhưng mà ở SQL Server cũng có thể có cú pháp tương tự động vì như thế bọn chúng đều dùng ngữ điệu T-SQL.
-
Thông thông thường Khi thao tác với những phần mềm trang web thì tớ hiếm khi dùng khóa nước ngoài chính vì tiếp tục rất rất lờ lững, chính vì vậy người tớ tiếp tục nỗ lực kiến thiết CSDL làm thế nào tối ưu nhằm ko tồn bên trên khóa nước ngoài.