

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!
ENUM
thườ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
SET
có 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.