Web Cơ Bản

Ràng buộc FOREIGN KEY (khóa ngoại) trong MySQL

1) Chức năng của ràng buộc FOREIGN KEY

- Trong hệ quản trị cơ sở dữ liệu MySQL, ràng buộc FOREIGN KEY (khóa ngoại) được dùng để xây dựng một mối liên kết giữa hai cái bảng nhằm đảm bảo tính "toàn vẹn dữ liệu" của các bảng (khi trong hai cái bảng đó có một cái bảng tham chiếu đến dữ liệu của cái bảng còn lại)

Ví dụ:

- Tôi có hai cái bảng Customers & Orders lần lượt như bên dưới:

Bảng Customers lưu trữ thông tin của các khách hàng.

ID Name Address City
1 Nguyễn Thành Nhân 63 Hoàng Văn Thụ Cần Thơ
2 Dương Văn Gánh 16B Nguyễn Văn Cừ Sóc Trăng
3 Trần Thị Huỳnh Như 365A Trần Quang Diệu Vĩnh Long

Bảng Orders lưu trữ thông tin về các đơn đặt hàng của những khách hàng trong cái bảng Customers.

ID OrderDate CustomerID
1 2019-08-05 1
2 2019-09-17 2
3 2019-10-22 2
4 2019-11-08 3

- Cột CustomerID trong bảng Orders tham chiếu dữ liệu từ cột ID trong cái bảng Customers, nó cho chúng ta biết những khách hàng nào đã đặt những đơn hàng nào (nếu chúng ta thêm vào cái bảng Order những đơn hàng mà ID của các khách hàng không tồn tại thì những đơn hàng đó sẽ trở nên không hợp lệ)

- Để tránh việc bảng Orders bị chứa những đơn hàng không hợp lệ thì chúng ta cần phải thiết lập ràng buộc FOREIGN KEY cho cột CustomerID, ràng buộc này đảm bảo việc ngăn chặn những hành động không hợp lệ, điển hình như:

  • Không cho phép thêm những đơn hàng mà ID của khách hàng không tồn tại trong bảng Customers.
  • Không cho phép xóa những khách hàng mà ID của họ có tồn tại trong bảng Orders.
  • Không cho phép xóa bảng Customers khi bảng Orders vẫn còn đang tồn tại.
  • . . . .

- Trong hai cái bảng, bảng chứa ràng buộc FOREIGN KEY (khóa ngoại) được gọi là bảng con, còn bảng chứa khóa ứng viên thì được gọi là bảng tham chiếu hoặc bảng cha (điển hình như trong ví dụ phía trên, bảng Orders được gọi là bảng con, bảng Customers được gọi là bảng tham chiếu)

- Để tạo một ràng buộc FOREIGN KEY thì chúng ta sử dụng cú pháp như sau:

CONSTRAINT tên_ràng_buộc FOREIGN KEY (column1) REFERENCES table_name(column2)

- Trong đó:

  • column1 là tên của cái cột (bên trong bảng con) mà các bạn muốn thiết lập ràng buộc FOREIGN KEY.
  • table_name là tên của cái bảng tham chiếu.
  • column2 là tên của cái cột (bên trong bảng tham chiếu) mà cột column1 tham chiếu đến, ngoài ra column2 còn phải là khóa chính (PRIMARY KEY) của cái bảng tham chiếu.
Ví dụ:

- Dưới đây là đoạn mã dùng để tạo hai cái bảng Customers & Orders giống như trong ví dụ phía trên.

CREATE TABLE Customers(
	ID INT PRIMARY KEY,
	Name VARCHAR(255),
	Address VARCHAR(255),
	City VARCHAR(255)
);
CREATE TABLE Orders(
	ID INT PRIMARY KEY,
	OrderDate DATE,
	CustomerID INT,
	CONSTRAINT lien_ket_01 FOREIGN KEY (CustomerID) REFERENCES Customers(ID)
);

2) Thêm ràng buộc FOREIGN KEY (khi bảng đã được tạo)

- Đối với trường hợp bảng đã được tạo trước, nhưng do quên thiết lập ràng buộc FOREIGN KEY cho cột nên bây giờ các bạn muốn bổ sung, để làm được điều đó thì sử dụng lệnh chỉnh sửa bảng như bên dưới.

ALTER TABLE table1 ADD CONSTRAINT tên_ràng_buộc FOREIGN KEY (column1) REFERENCES table2(column2);

- Ví dụ:

ALTER TABLE Orders
ADD CONSTRAINT lien_ket_01 FOREIGN KEY (CustomerID) REFERENCES Customers(ID);

3) Cách xóa ràng buộc FOREIGN KEY

- Dưới đây là cú pháp dùng để xóa một ràng buộc FOREIGN KEY.

ALTER TABLE table_name DROP FOREIGN KEY tên_ràng_buộc;

- Ví dụ, để xóa ràng buộc FOREIGN KEY có tên là lien_ket_01 (trên bảng Orders) thì tôi sử dụng câu lệnh sau:

ALTER TABLE Orders DROP FOREIGN KEY lien_ket_01;