Đăng nhập

Bài 25: Khóa chính, khóa ngoại, ràng buộc duy nhất và tự động tăng – Xương sống của bảng dữ liệu!

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ộc
    • ON 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ênVai trò
PRIMARY KEYXác định dòng duy nhất, không NULL, không trùng
FOREIGN KEYTạ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 INCREMENTTự động tăng giá trị số mỗi khi INSERT

Bài tập nhỏ để nhớ lâu:

  1. Tạo bảng courses với course_id là khóa chính (tự động tăng) và tên khóa học là duy nhất.
  2. 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ảng students.

👉 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

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.