Nếu bạn tưởng tượng một cơ sở dữ liệu giống như một trường học, thì mỗi bảng là một lớp học, và mỗi dòng dữ liệu là một học sinh. Làm sao để phân biệt từng học sinh với nhau? Làm sao để biết học sinh đó học lớp nào? Và làm sao đảm bảo không có hai học sinh trùng số báo danh?
Đó chính là nhiệm vụ của Primary Key, Foreign Key, Unique, và Auto Increment – những yếu tố quan trọng giúp bạn kiểm soát và tổ chức dữ liệu hiệu quả trong SQL.
PRIMARY KEY – Khóa chính
Khóa chính là một cột (hoặc nhiều cột) dùng để xác định duy nhất một dòng dữ liệu trong bảng. Không thể để trống (NOT NULL), không được trùng lặp.
Ví dụ:
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(100)
);
Ở đây, student_id
là khóa chính – mỗi sinh viên sẽ có một mã duy nhất.
Ghi nhớ:
- Một bảng chỉ có 1 khóa chính.
- Có thể là 1 cột hoặc tổ hợp nhiều cột (composite key).
FOREIGN KEY – Khóa ngoại
Khóa ngoại là cột dùng để liên kết đến khóa chính ở bảng khác. Đây là cách bạn “nối” các bảng lại với nhau để xây dựng mối quan hệ.
Ví dụ:
CREATE TABLE enrollments (
id INT PRIMARY KEY,
student_id INT,
FOREIGN KEY (student_id) REFERENCES students(student_id)
);
Ở đây, student_id
là khóa ngoại trỏ đến students
. Điều này đảm bảo rằng chỉ sinh viên tồn tại trong bảng students
mới được ghi danh.
Lưu ý:
- Foreign Key giúp bảo vệ tính toàn vẹn dữ liệu (referential integrity).
- Khi xóa dữ liệu từ bảng chính, bạn có thể đặt hành vi như:
ON DELETE CASCADE
→ xóa cả bên phụ thuộcON DELETE SET NULL
→ đặt thành NULL
UNIQUE – Ràng buộc giá trị duy nhất
UNIQUE đảm bảo rằng các giá trị trong cột không bị trùng lặp – nhưng không nhất thiết là khóa chính.
Ví dụ:
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
Ở đây, email
phải là duy nhất – hai người không thể đăng ký cùng một email.
Bạn có thể đặt nhiều cột là UNIQUE
, nhưng chỉ 1 cột là PRIMARY KEY
.
AUTO INCREMENT – Tự động tăng giá trị
Cực kỳ hữu ích khi bạn muốn mỗi dòng dữ liệu có một ID duy nhất mà không cần nhập thủ công.
Ví dụ:
CREATE TABLE books (
book_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100)
);
Mỗi khi bạn thêm 1 cuốn sách mới, book_id
sẽ tự động tăng từ 1, 2, 3…
Tóm tắt nhanh:
Tên | Vai trò |
---|---|
PRIMARY KEY | Xác định dòng duy nhất, không NULL, không trùng |
FOREIGN KEY | Tạo liên kết với bảng khác (quan hệ 1-n, n-n…) |
UNIQUE | Đảm bảo giá trị không bị trùng |
AUTO INCREMENT | Tự động tăng giá trị số mỗi khi INSERT |
Bài tập nhỏ để nhớ lâu:
- Tạo bảng
courses
vớicourse_id
là khóa chính (tự động tăng) và tên khóa học là duy nhất. - Tạo bảng
registrations
để lưu học viên đăng ký, với khóa ngoại liên kết đến bảngstudents
.
👉 Trong bài tiếp theo, ta sẽ học cách tạo bảng hoàn chỉnh bằng lệnh CREATE TABLE. Lúc đó bạn sẽ kết hợp tất cả các thuộc tính trên để xây dựng bảng dữ liệu “xịn sò” của riêng mình!
Thảo luận