Tại sao bảng dữ liệu và khóa chính quan trọng trong MySQL
Khi xây dựng một hệ thống quản lý dữ liệu, bảng (table) chính là nơi chứa đựng mọi thông tin, còn khóa chính (primary key) là "dấu vân tay" duy nhất của mỗi bản ghi. Nếu không có bảng được thiết kế tốt, dữ liệu sẽ trở nên lộn xộn và khó kiểm soát. Nếu thiếu khóa chính, việc xác định, cập nhật hay xóa một bản ghi cụ thể sẽ gặp nhiều khó khăn, thậm chí dẫn đến trùng lặp dữ liệu.
Tạo bảng trong MySQL
Cú pháp cơ bản
Để tạo một bảng mới, MySQL cung cấp lệnh CREATE TABLE. Cú pháp đơn giản nhất:
CREATE TABLE tên_bảng (
cột1 kiểu_dữ_liệu,
cột2 kiểu_dữ_liệu,
...
);
Chọn kiểu dữ liệu phù hợp
MySQL hỗ trợ nhiều kiểu dữ liệu khác nhau:
- Số nguyên: INT, TINYINT, BIGINT
- Số thực: FLOAT, DOUBLE, DECIMAL
- Chuỗi: VARCHAR, TEXT, CHAR
- Ngày giờ: DATE, DATETIME, TIMESTAMP
- Boolean: TINYINT(1) (thường dùng 0/1)
Ví dụ, để lưu trữ thông tin sinh viên:
CREATE TABLE sinh_vien (
id INT,
ho_ten VARCHAR(100),
tuoi INT,
email VARCHAR(100),
ngay_sinh DATE
);
Ràng buộc (Constraints)
Để đảm bảo dữ liệu hợp lệ, ta có thể thêm các ràng buộc:
- NOT NULL: Bắt buộc phải có giá trị
- UNIQUE: Giá trị duy nhất trong cột
- DEFAULT: Giá trị mặc định nếu không chỉ định
CREATE TABLE sinh_vien (
id INT NOT NULL,
ho_ten VARCHAR(100) NOT NULL,
tuoi INT DEFAULT 18,
email VARCHAR(100) UNIQUE,
ngay_sinh DATE
);
Thiết lập khóa chính (Primary Key)
Khái niệm khóa chính
Khóa chính là cột (hoặc tập hợp các cột) dùng để định danh duy nhất mỗi bản ghi trong bảng. Mỗi bảng chỉ có một khóa chính, và giá trị trong cột khóa chính không được phép trùng lặp hay bỏ trống.
Cách thêm khóa chính khi tạo bảng
Có hai cách phổ biến:
1. Thêm trực tiếp sau cột:CREATE TABLE sinh_vien (
id INT PRIMARY KEY,
ho_ten VARCHAR(100) NOT NULL,
tuoi INT DEFAULT 18,
email VARCHAR(100) UNIQUE,
ngay_sinh DATE
);
2. Thêm khóa chính cho nhiều cột (composite primary key):
CREATE TABLE sinh_vien (
id INT,
ho_ten VARCHAR(100) NOT NULL,
tuoi INT DEFAULT 18,
email VARCHAR(100) UNIQUE,
ngay_sinh DATE,
PRIMARY KEY (id, ho_ten)
);
Tự động tăng giá trị (AUTO_INCREMENT)
Với các bảng có nhiều bản ghi, thường ta muốn MySQL tự động gán giá trị duy nhất cho khóa chính. Sử dụng AUTO_INCREMENT:
Quảng cáo
300x250 In-Content Advertisement
CREATE TABLE sinh_vien (
id INT PRIMARY KEY AUTO_INCREMENT,
ho_ten VARCHAR(100) NOT NULL,
tuoi INT DEFAULT 18,
email VARCHAR(100) UNIQUE,
ngay_sinh DATE
);
Mỗi khi thêm bản ghi mới, id sẽ tự động tăng 1.
Ví dụ thực tế: Quản lý sinh viên và điểm thi
Giả sử ta cần xây dựng hệ thống quản lý sinh viên và điểm thi:
CREATE TABLE sinh_vien (
ma_sv INT PRIMARY KEY AUTO_INCREMENT,
ho_ten VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
ngay_sinh DATE
);
CREATE TABLE mon_hoc (
ma_mon INT PRIMARY KEY AUTO_INCREMENT,
ten_mon VARCHAR(100) NOT NULL,
so_tin_chi INT DEFAULT 2
);
CREATE TABLE diem_thi (
ma_diem INT PRIMARY KEY AUTO_INCREMENT,
ma_sv INT NOT NULL,
ma_mon INT NOT NULL,
diem_thi FLOAT,
FOREIGN KEY (ma_sv) REFERENCES sinh_vien(ma_sv),
FOREIGN KEY (ma_mon) REFERENCES mon_hoc(ma_mon),
UNIQUE (ma_sv, ma_mon)
);
Ở đây, ma_sv và ma_mon là khóa chính của các bảng tương ứng, giúp định danh duy nhất mỗi sinh viên và môn học. Bảng diem_thi dùng khóa chính riêng (ma_diem) và thêm ràng buộc UNIQUE (ma_sv, ma_mon) để đảm bảo mỗi sinh viên chỉ có một điểm cho mỗi môn.
Mẹo và lưu ý khi thiết kế bảng và khóa chính
- Chọn kiểu dữ liệu phù hợp: Tránh lãng phí bộ nhớ, ví dụ không dùng VARCHAR(255) nếu chỉ cần 50 ký tự.
- Đặt tên cột rõ ràng: Sử dụng tên mô tả, tránh ký tự đặc biệt.
- Luôn có khóa chính: Mỗi bảng nên có một khóa chính để đảm bảo tính toàn vẹn dữ liệu.
- Sử dụng AUTO_INCREMENT cho khóa chính số: Giúp tự động sinh giá trị duy nhất.
- Kiểm tra ràng buộc: Đảm bảo NOT NULL, UNIQUE được áp dụng đúng chỗ.
Kết luận
Việc tạo bảng và thiết lập khóa chính trong MySQL là bước nền tảng để xây dựng một cơ sở dữ liệu mạnh mẽ và hiệu quả. Bằng cách chọn đúng kiểu dữ liệu, áp dụng các ràng buộc hợp lý và luôn có khóa chính cho mỗi bảng, bạn sẽ đảm bảo dữ liệu được tổ chức gọn gàng, truy vấn nhanh chóng và an toàn trước các lỗi thường gặp. Hãy thực hành với các ví dụ trên và điều chỉnh theo nhu cầu cụ thể của dự án để nâng cao kỹ năng quản trị cơ sở dữ liệu của mình.