Trong MySQL, ràng buộc FOREIGN KEY (khóa ngoại) là một tính năng quan trọng để đảm bảo tính nhất quán và liên kết giữa các bảng trong cơ sở dữ liệu quan hệ. Ràng buộc này đảm bảo rằng giá trị trong cột của bảng con phải tồn tại trong cột khóa chính của bảng cha. Điều này giúp duy trì tính toàn vẹn dữ liệu và quan hệ giữa các bảng.
Cú pháp để định nghĩa ràng buộc FOREIGN KEY
Khi tạo bảng (CREATE TABLE):
CREATE TABLE child_table (
...
column_name datatype,
...
CONSTRAINT fk_constraint_name
FOREIGN KEY (column_name) REFERENCES parent_table(parent_column)
ON DELETE action
ON UPDATE action
);
Trong đó:
child_table: Là tên của bảng con mà bạn đang định nghĩa ràng buộc.
column_name: Là tên cột trong child_table mà bạn muốn áp dụng ràng buộc FOREIGN KEY.
parent_table: Là tên của bảng cha chứa cột khóa chính mà column_name tham chiếu đến.
parent_column: Là tên của cột khóa chính trong parent_table mà column_name tham chiếu đến.
fk_constraint_name: Là tên của ràng buộc FOREIGN KEY (không bắt buộc).
ON DELETE action: Xác định hành động khi các bản ghi trong bảng cha được xóa (CASCADE, SET NULL, RESTRICT, NO ACTION).
ON UPDATE action: Xác định hành động khi giá trị trong cột khóa chính của bảng cha được cập nhật (CASCADE, SET NULL, RESTRICT, NO ACTION).
Ví dụ:
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT,
quantity INT,
FOREIGN KEY (product_id) REFERENCES products(product_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Trong ví dụ này, orders là bảng con, product_id là cột có ràng buộc FOREIGN KEY tham chiếu đến cột product_id trong bảng products.
Hành động khi xóa và cập nhật (ON DELETE và ON UPDATE)
Khi định nghĩa ràng buộc FOREIGN KEY, bạn có thể chỉ định các hành động để thực hiện khi các thay đổi xảy ra trong bảng cha:
CASCADE: Xóa hoặc cập nhật tất cả các bản ghi trong bảng con mà có giá trị tham chiếu đến.
SET NULL: Đặt giá trị của các cột tham chiếu trong bảng con thành NULL khi bản ghi tương ứng trong bảng cha bị xóa hoặc cập nhật.
RESTRICT hoặc NO ACTION: Ngăn chặn xóa hoặc cập nhật các bản ghi trong bảng cha khi có các bản ghi con tham chiếu đến.
Lợi ích của ràng buộc FOREIGN KEY
Tính toàn vẹn dữ liệu: Đảm bảo rằng các bản ghi trong bảng con phải liên kết với các bản ghi trong bảng cha, ngăn ngừa dữ liệu rác.
Tự động hóa các hành động: Xóa hoặc cập nhật dữ liệu liên quan một cách tự động khi có thay đổi trong bảng cha.
Mối quan hệ và phân tích dữ liệu: Giúp hỗ trợ trong việc phân tích dữ liệu, quản lý mối quan hệ giữa các đối tượng trong cơ sở dữ liệu.
Lưu ý
- MySQL yêu cầu các cột trong ràng buộc FOREIGN KEY và cột khóa chính của bảng cha phải có cùng loại dữ liệu.
- Ràng buộc FOREIGN KEY chỉ có hiệu lực trên các bảng sử dụng các loại lưu trữ hỗ trợ, chẳng hạn như InnoDB.
- Cần cẩn thận khi sử dụng hành động
CASCADE để đảm bảo rằng các thay đổi không làm mất dữ liệu quan trọng hoặc gây ra hậu quả không mong muốn.
Ràng buộc FOREIGN KEY là một công cụ quan trọng trong quản lý cơ sở dữ liệu quan hệ để đảm bảo tính toàn vẹn và mối quan hệ giữa các bảng.