Các kiểu ràng buộc dữ liệu (constraint) trong MySQL
- 07-07-2025
- Toanngo92
- 0 Comments
Mục lục
1. Ràng buộc NOT NULL
✅ Mục đích:
Không cho phép cột nhận giá trị NULL. Đây là ràng buộc phổ biến nhất.
Ví dụ:
CREATE TABLE Users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
Nếu bạn cố gắng chèn bản ghi không có
2. Ràng buộc DEFAULT
✅ Mục đích:
Cung cấp giá trị mặc định nếu người dùng không chỉ định giá trị cho cột.
Ví dụ:
CREATE TABLE Products (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
status VARCHAR(20) DEFAULT 'available'
);
INSERT INTO Products (id, name) VALUES (1, 'Túi xách');
-- status sẽ tự động là 'available'
3. Ràng buộc CHECK (chỉ từ MySQL 8.0.16 trở lên)
✅ Mục đích:
Ràng buộc logic, bắt buộc dữ liệu phải thỏa điều kiện.
Ví dụ:
CREATE TABLE Orders (
id INT PRIMARY KEY,
quantity INT,
CHECK (quantity > 0)
);
Nếu bạn dùng phiên bản MySQL < 8.0.16, hãy dùng TRIGGER để thay thế (như đã trình bày ở phần trước).
4. Ràng buộc ENUM
✅ Mục đích:
Chỉ cho phép chọn một giá trị từ danh sách cố định.
Ví dụ:
CREATE TABLE Customers (
id INT PRIMARY KEY,
name VARCHAR(100),
gender ENUM('male', 'female', 'other') NOT NULL
);
INSERT INTO Customers VALUES (1, 'Alice', 'female'); -- ✅ hợp lệ
INSERT INTO Customers VALUES (2, 'Bob', 'unknown'); -- ❌ lỗi!
ENUMthường dùng cho giới tính, trạng thái đơn hàng, vai trò người dùng…
5. Ràng buộc SET
✅ Mục đích:
Cho phép lưu nhiều giá trị được chọn từ một tập hợp cố định.
Ví dụ:
CREATE TABLE Users (
id INT PRIMARY KEY,
name VARCHAR(100),
hobbies SET('music', 'sports', 'reading', 'travel')
);
INSERT INTO Users VALUES (1, 'Toan', 'music,reading');
Một
SETcó thể chứa nhiều giá trị cách nhau bởi dấu phẩy, nhưng tổng số phần tử không được vượt quá 64.
6. Ràng buộc UNIQUE (tổng kết lại)
✅ Mục đích:
Đảm bảo cột (hoặc nhóm cột) không chứa giá trị trùng lặp.
CREATE TABLE Employees (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
Có thể tạo nhiều cột
UNIQUE, nhưng chỉ có một khóa chính (PRIMARY KEY) trong bảng.
7. Tổ hợp nhiều ràng buộc
Bạn có thể kết hợp nhiều ràng buộc trong một cột:
CREATE TABLE Members (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
age INT CHECK (age >= 18),
role ENUM('admin', 'member') DEFAULT 'member'
);
8. Tổng Kết Tính Năng Của Các Constraint
| Ràng buộc | Mục đích chính | Hỗ trợ phiên bản MySQL |
|---|---|---|
| NOT NULL | Không cho phép NULL | ✅ Mọi phiên bản |
| DEFAULT | Thiết lập giá trị mặc định | ✅ Mọi phiên bản |
| CHECK | Giới hạn giá trị theo điều kiện | ✅ Từ MySQL 8.0.16 trở lên |
| UNIQUE | Đảm bảo không trùng lặp giá trị | ✅ Mọi phiên bản |
| ENUM | Chọn một giá trị từ danh sách cố định | ✅ Mọi phiên bản |
| SET | Chọn nhiều giá trị từ danh sách cố định | ✅ Mọi phiên bản |
📘 Kết Luận
Ràng buộc dữ liệu (constraints) là xương sống trong thiết kế cơ sở dữ liệu, giúp:
- Đảm bảo dữ liệu nhập vào luôn đúng định dạng.
- Bảo vệ toàn vẹn dữ liệu (integrity).
- Giảm bớt lỗi logic trong ứng dụng.





