

Khóa Ngoại (FOREIGN KEY) Trong MySQL
- 07-07-2025
- Toanngo92
- 0 Comments
Mục lục
1. FOREIGN KEY Là Gì?
- FOREIGN KEY (khóa ngoại) là một ràng buộc (constraint) dùng để tạo mối liên kết giữa hai bảng trong cơ sở dữ liệu.
- Một cột (hoặc nhiều cột) trong bảng hiện tại sẽ tham chiếu (reference) tới khóa chính (PRIMARY KEY) hoặc UNIQUE trong bảng khác.
- Điều này đảm bảo rằng dữ liệu trong bảng con luôn hợp lệ và đồng bộ với bảng cha.
2. Ví Dụ Thực Tế
Giả sử bạn có 2 bảng:
LOP
(danh sách lớp):MaLop
,TenLop
SINHVIEN
:MaSV
,TenSV
,MaLop
← cộtMaLop
trong bảngSINHVIEN
sẽ tham chiếu đếnMaLop
trong bảngLOP
.
3. Cú Pháp Tạo FOREIGN KEY
✅ Cách 1: Tạo ngay khi tạo bảng
CREATE TABLE LOP (
MaLop INT PRIMARY KEY,
TenLop VARCHAR(100)
);
CREATE TABLE SINHVIEN (
MaSV INT PRIMARY KEY,
TenSV VARCHAR(100),
MaLop INT,
FOREIGN KEY (MaLop) REFERENCES LOP(MaLop)
);
✅ Cách 2: Tạo bằng lệnh ALTER TABLE
ALTER TABLE SINHVIEN
ADD CONSTRAINT fk_lop_sinhvien
FOREIGN KEY (MaLop) REFERENCES LOP(MaLop);
⚠️
CONSTRAINT fk_lop_sinhvien
là tên khóa ngoại. Việc đặt tên giúp dễ quản lý sau này (ví dụ khi xóa khóa).
4. Tùy Chọn ON DELETE và ON UPDATE
Khi tạo khóa ngoại, bạn có thể chỉ định hành động khi dòng bị tham chiếu bị xóa hoặc cập nhật:
Tùy chọn | Ý nghĩa |
---|---|
ON DELETE CASCADE | Xóa dữ liệu liên quan trong bảng con khi bảng cha bị xóa |
ON DELETE SET NULL | Đặt giá trị khóa ngoại trong bảng con thành NULL khi bảng cha bị xóa |
ON DELETE RESTRICT | Không cho xóa nếu có bản ghi con đang tham chiếu |
ON DELETE NO ACTION | Giống như RESTRICT (không hành động gì) |
Ví dụ:
CREATE TABLE SINHVIEN (
MaSV INT PRIMARY KEY,
TenSV VARCHAR(100),
MaLop INT,
FOREIGN KEY (MaLop) REFERENCES LOP(MaLop)
ON DELETE CASCADE
ON UPDATE CASCADE
);
5. Kiểm Tra Các Khóa Ngoại Trong Bảng
Dùng câu lệnh sau để liệt kê các khóa ngoại:
SELECT *
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'SINHVIEN';
6. Xóa Khóa Ngoại
Để xóa khóa ngoại, cần biết tên constraint:
ALTER TABLE SINHVIEN DROP FOREIGN KEY fk_lop_sinhvien;
7. Một Số Lưu Ý Khi Dùng FOREIGN KEY
Lưu ý | Giải thích |
---|---|
✅ Cột được tham chiếu phải là PRIMARY KEY hoặc UNIQUE | |
✅ Phải có cùng kiểu dữ liệu (hoặc tương thích) | |
✅ Cả hai bảng phải dùng InnoDB (bộ máy hỗ trợ ràng buộc) | |
❌ Không dùng được với MEMORY hoặc MyISAM engine |
8. Kết Luận
FOREIGN KEY
giúp thiết lập mối quan hệ cha – con giữa các bảng, đảm bảo toàn vẹn dữ liệu và hỗ trợ hành vi đồng bộ khi cập nhật/xóa dữ liệu. Trong thực tế, các mối quan hệ như:
User → Orders
Category → Products
Class → Students
đều cần đến khóa ngoại để đảm bảo tính chính xác và logic.