Bài MySQL 38: Khóa phụ trong MySQL

0
1716

Xin chào các bạn, trong bài học ngày hôm nay chúng ta sẽ tìm hiểu về khóa ngoại trong MySQL và cách tạo, thêm và xóa các khóa ngoại trong MySQL.

Giới thiệu

Khóa ngoại là một trường trong bảng trùng với một trường khác của bảng khác. Một khóa ngoại hạn chế về dữ liệu trong các bảng có liên quan, cho phép MySQL duy trì tính toàn vẹn tham chiếu.

Chúng ta hãy xem sơ đồ cơ sở dữ liệu sau đây:

Chúng ta có hai bảng: customersorders. Mỗi khách hàng có thể có một hoặc nhiều đơn đặt hàng và mỗi đơn hàng chỉ thuộc về một khách hàng. Mối quan hệ giữa bảng khách hàng và bảng đơn đặt hàng là một-nhiều, và nó được thiết lập bởi khóa ngoại trong bảng orders được chỉ định bởi trường customerNumber. Trường customerNumber trong bảng đơn đặt hàng liên quan đến trường customerNumber chính trong bảng customers.

Bảng customers được gọi là bảng cha hoặc bảng được tham chiếu và bảng orders được gọi là bảng con hoặc bảng tham chiếu.

Khóa ngoại có thể là một hoặc một tập hợp các cột. Các cột trong bảng con thường tham chiếu đến các cột khóa chính trong bảng cha.

Một bảng có thể có nhiều khóa ngoại, và mỗi khóa ngoại trong bảng con có thể tham chiếu đến một bảng cha khác.

Một hàng trong bảng con phải chứa các giá trị tồn tại trong bảng cha, ví dụ: mỗi bản ghi đơn hàng trong orders phải có một số khách hàng tồn tại trong bảng khách hàng. Nhiều đơn đặt hàng có thể tham chiếu cùng một khách hàng, do đó mối quan hệ này được gọi là mối quan hệ một-nhiều.

Cách tạo khóa ngoại cho bảng

Cú pháp sau minh họa cách định nghĩa khóa ngoại trong bảng con trong câu lệnh CREATE TABLE:

Trong đó:

  • Mệnh đề CONSTRAINT cho phép bạn định nghĩa tên cho ràng buộc của khóa ngoại. Nếu bạn bỏ qua nó, MySQL sẽ tạo ra một tên bất kì.
  • Mệnh đề FOREIGN KEY chỉ định tên cột khóa ngoại. Bạn có thể đặt một tên cho khóa ngoại hoặc để cho MySQL tự tạo. Lưu ý rằng MySQL sẽ tự động tạo một chỉ mục với tên foreign_key_name.
  • Mệnh đề REFERENCES chỉ định bảng cha và các cột của nó mà các cột trong bảng con tham chiếu. Số lượng các cột trong bảng con và bảng cha được chỉ định trong khóa ngoại.
  • Mệnh đề ON DELETE cho phép bạn xác định những gì xảy ra với các bản ghi trong bảng con khi các bản ghi trong bảng cha bị xóa. Nếu bạn bỏ qua mệnh đề ON DELETE và xóa một bản ghi trong bảng cha mà các bản ghi trong bảng con tham chiếu đến, MySQL sẽ từ chối việc xóa.
  • Mệnh đề ON UPDATE cho phép bạn xác định những gì xảy ra với các hàng trong bảng con khi các hàng trong bảng cha được cập nhật. Bạn có thể bỏ qua mệnh đề ON UPDATE để cho phép MySQL từ chối bất kỳ cập nhật nào cho các hàng trong bảng con khi các hàng trong bảng cha được cập nhật.

Ví dụ về cách tạo khóa ngoại cho bảng

Ví dụ sau tạo cơ sở dữ liệu dbdemo và hai bảng: categoriesproducts. Mỗi danh mục có một hoặc nhiều sản phẩm và mỗi sản phẩm chỉ thuộc một danh mục. Trường cat_id trong bảng sản phẩm được định nghĩa là khóa ngoại.

Thêm một khóa ngoại vào bảng

Để thêm khóa ngoài vào bảng hiện có, bạn sử dụng câu lệnh ALTER TABLE với cú pháp như sau:

Xóa một khóa ngoại

Bạn cũng sử dụng câu lệnh ALTER TABLE để xóa  khóa ngoại như câu lệnh sau:

Trong câu lệnh trên:

  • Đầu tiên, bạn chỉ định tên bảng mà bạn muốn loại bỏ khóa ngoại.
  • Thứ hai, bạn đặt tên khóa ngoại sau mệnh đề DROP FOREIGN KEY.

Kết luận

Như vậy trong bài học hôm nay mình đã hướng dẫn các bạn cách sử dụng khóa ngoại trong MySQL. Trong bài học tiếp theo chúng ta sẽ tìm hiểu về Sequence trong MySQL.

Chúc các bạn học tập tốt!

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây