Cách sử dụng các ràng buộc khóa ngoại MySQL

How Use Mysql Foreign Key Constraints



Ràng buộc khóa ngoại được sử dụng để tạo mối quan hệ giữa hai bảng trong cơ sở dữ liệu MySQL. Nó là một tính năng rất quan trọng của MySQL để thiết lập các loại hạn chế khác nhau trên các bảng liên quan. Để xác định bất kỳ ràng buộc khóa ngoại nào cho bất kỳ bảng nào, bạn phải sử dụng khóa chính của bảng khác. Khóa chính là khóa duy nhất cho bảng để xác định hàng cụ thể trong bảng và khi khóa chính này được sử dụng vào bảng khác để tạo mối quan hệ một-một hoặc một-nhiều hoặc nhiều-nhiều thì nó được gọi là khóa ngoại. Các tính năng của các khóa ngoại và cách các khóa này có thể được sử dụng trong các bảng MySQL được trình bày trong bài viết này.

Đặc điểm của các ràng buộc chính đối với nước ngoài:

Một số tính năng quan trọng của ràng buộc khóa ngoại được giải thích dưới đây.







  • Kiểu dữ liệu của khóa ngoại được sử dụng trong bảng con phải giống với kiểu dữ liệu của khóa chính được sử dụng trong bảng mẹ để tham chiếu khóa ngoại.
  • Bất kỳ cột chỉ mục nào hoặc nhiều cột đều có thể được tham chiếu như một khóa ngoại chỉ cho bảng InnoDB.
  • Các đặc quyền tham chiếu hoặc ít nhất một trong các đặc quyền của các câu lệnh SELECT, INSERT, UPDATE và DELETE được yêu cầu để tạo khóa ngoại.
  • Khóa ngoại có thể được tạo theo hai cách. Một bằng cách sử dụng câu lệnh CREATE và một bằng cách sử dụng câu lệnh ALTER.

Điều kiện tiên quyết:

Trước khi tạo ràng buộc khóa ngoại, bạn phải tạo cơ sở dữ liệu và bảng cha với khóa chính. Giả sử tên cơ sở dữ liệu là ‘ thư viện 'Và nó chứa hai bảng cha có tên là' sách ' và ' người đi vay '. Tạo kết nối với máy chủ MySQL bằng cách sử dụng mysql và chạy các câu lệnh SQL sau để tạo cơ sở dữ liệu và các bảng.



TẠO RA CƠ SỞ DỮ LIỆU thư viện;
SỬ DỤNG thư viện;

TẠO RA BÀN sách(
Tôi NS KHÔNG PHẢI VÔ GIÁ TRỊ AUTO_INCREMENT ,
chức vụ varchar (năm mươi) KHÔNG PHẢI VÔ GIÁ TRỊ ,
tác giả varchar (năm mươi) KHÔNG PHẢI VÔ GIÁ TRỊ ,
nhà xuất bản varchar (năm mươi) KHÔNG PHẢI VÔ GIÁ TRỊ ,
KHÓA CHÍNH (Tôi)
) ĐỘNG CƠ = INNODB ;

TẠO RA BÀN người đi vay(
Tôi VARCHAR (năm mươi) KHÔNG PHẢI VÔ GIÁ TRỊ ,
Tên varchar (năm mươi) KHÔNG PHẢI VÔ GIÁ TRỊ ,
Địa chỉ varchar (năm mươi) KHÔNG PHẢI VÔ GIÁ TRỊ ,
e-mail varchar (năm mươi) KHÔNG PHẢI VÔ GIÁ TRỊ ,
KHÓA CHÍNH (Tôi)
) ĐỘNG CƠ = INNODB ;



Xác định Ràng buộc khóa ngoài bằng cách sử dụng câu lệnh CREATE

Tạo một bảng có tên là ‘ book_borrow_info ‘Với các ràng buộc khóa ngoại bằng cách thực hiện câu lệnh sau. Đây, book_id lĩnh vực là một khóa ngoại cho bảng này và mọi giá trị của trường này phải tồn tại trong Tôi lĩnh vực sách bàn. sách là bảng cha và book_borrow_info là bảng con. Hai hạn chế cũng được đặt ra với khóa ngoại ở đây. đó là XÓA CASCADECẬP NHẬT CASCADE . Điều đó có nghĩa là nếu bất kỳ khóa chính nào sẽ xóa hoặc cập nhật khỏi bảng mẹ thì các bản ghi tương ứng liên quan đến bảng con liên quan đến khóa ngoại sẽ bị xóa hoặc khóa ngoại sẽ được cập nhật.





TẠO RA BÀN book_borrow_info(
vay_id VARCHAR (năm mươi),
book_id NS ,
vay_date NGÀY KHÔNG PHẢI VÔ GIÁ TRỊ ,
ngày trở lại NGÀY KHÔNG PHẢI VÔ GIÁ TRỊ ,
trạng thái VARCHAR (mười lăm) KHÔNG PHẢI VÔ GIÁ TRỊ ,
MỤC LỤC par_ind(book_id),
KHÓA CHÍNH (vay_id,vay_date),
TỪ KHÓA NGOẠI TỆ (book_id) NGƯỜI GIỚI THIỆU sách(Tôi)
TRÊN XÓA BỎ CASCADE
TRÊN CẬP NHẬT CASCADE
) ĐỘNG CƠ = INNODB ;

Bây giờ, hãy chạy các câu lệnh SQL sau để chèn một số bản ghi trong cả hai bảng. Câu lệnh INSERT đầu tiên sẽ chèn bốn bản ghi vào sách bàn. Bốn giá trị của Tôi lĩnh vực sách bảng sẽ là 1, 2, 3 và 4 cho thuộc tính tự động tăng. Câu lệnh INSERT thứ hai sẽ chèn bốn bản ghi vào book_borrow_info dựa vào Tôi giá trị của sách bàn.



CHÈN VÀO TRONG sách GIÁ TRỊ
( VÔ GIÁ TRỊ , 'Giết con chim nhại', 'Harper Lee', 'Nhà xuất bản Grand Central'),
( VÔ GIÁ TRỊ , 'Một trăm năm yên bình', 'Garcia Marquez', 'Lutfi Ozkok'),
( VÔ GIÁ TRỊ , 'A Passage to India', 'Forster, E.M.', 'Thư viện hình ảnh Hulton của BBC'),
( VÔ GIÁ TRỊ , 'Người vô hình', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

CHÈN VÀO TRONG book_borrow_info GIÁ TRỊ
('123490', 1, '2020-02-15', '2020-02-25', 'Trả lại'),
('157643', 2, '2020-03-31', '2020-03-10', 'Chưa giải quyết'),
('174562', 4, '2020-04-04', '2020-04-24', 'Mượn'),
('146788', 3, '2020-04-10', '2020-01-20', 'Mượn');

Nếu bạn cố gắng chèn một giá trị trong trường khóa ngoại của bảng con không tồn tại trong trường khóa chính của bảng mẹ thì MySQL sẽ tạo ra lỗi. Câu lệnh SQL sau sẽ tạo ra lỗi vì bảng cha, sách không chứa bất kỳ giá trị id nào 10 .

CHÈN VÀO TRONG book_borrow_info GIÁ TRỊ
('195684', 10, '2020-04-15', '2020-04-30', 'Trả lại');

Sau khi thực hiện câu lệnh DELETE sau, khi bản ghi thứ tư sẽ bị xóa khỏi sách bảng sau đó đến các bản ghi liên quan từ book_borrow_info bảng sẽ tự động bị xóa đối với ràng buộc khóa ngoại.

XÓA BỎ TỪ sách Ở ĐÂU Tôi= 4;
LỰA CHỌN * từ sách;
LỰA CHỌN * từ book_borrow_info;

Xác định Ràng buộc khóa ngoài bằng cách sử dụng câu lệnh ALTER

Lúc đầu, hãy chèn một số bản ghi vào người đi vay bảng và bảng này sẽ được định nghĩa là bảng mẹ trong phần tiếp theo TUỔI tuyên bố.

CHÈN VÀO TRONG người đi vay GIÁ TRỊ
('123490', 'Patrick Wood', '34 West Street LANCASTER LA14 9ZH', '[email được bảo vệ]'),
('157643', 'Ezra Martin', '10 The Grove BIRMINGHAM B98 1EU', '[email được bảo vệ]'),
('174562', 'John Innes Archie', '55 Đường chính LIVERPOOL L2 3OD ', '[email được bảo vệ]'),
('146788', 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME', '[email được bảo vệ]');

Chạy phần sau TUỔI câu lệnh để thiết lập một ràng buộc khóa ngoại khác cho book_borrow_info bảng để tạo mối quan hệ với người đi vay bàn. Ở đây, vay_id được định nghĩa là một khóa ngoại cho book_borrow_info bàn.

ALTER TABLE book_borrow_info THÊM CONSTRAINT fk_borrower
TỪ KHÓA NGOẠI TỆ(vay_id)TÀI LIỆU THAM KHẢO người vay(Tôi)VỀ XÓA CASCADE VỀ HẠN CHẾ CẬP NHẬT;

Bây giờ, hãy chèn một bản ghi vào book_borrow_info có giá trị vay_id giá trị tồn tại trong Tôi lĩnh vực người đi vay bàn. 157643 giá trị tồn tại trong bảng người vay và câu lệnh INSERT sau sẽ được thực thi thành công.

CHÈN VÀO TRONG book_borrow_info GIÁ TRỊ
('157643', 1, '2020-03-10', '2020-03-20', 'Trả lại');

Câu lệnh INSERT sau sẽ tạo ra thông báo lỗi vì giá trị id 195680 không tồn tại trong bảng người vay.

CHÈN VÀO TRONG book_borrow_info GIÁ TRỊ
('195680', 1, '2020-04-15', '2020-04-30', 'Trả lại');

Phần kết luận:

Xác định các ràng buộc khóa ngoại đúng cách là một nhiệm vụ rất quan trọng để tạo cơ sở dữ liệu quan hệ và quản lý dữ liệu giữa các bảng một cách thích hợp. Biết cách sử dụng các ràng buộc khóa ngoại là rất cần thiết cho các nhà thiết kế cơ sở dữ liệu. Tôi hy vọng bài viết này sẽ giúp các nhà thiết kế cơ sở dữ liệu mới hiểu được khái niệm về các ràng buộc khóa ngoại và áp dụng chúng đúng cách trong công việc của họ.