FOREIGN KEY (khóa ngoại) trong MySQL

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;