Sử dụng ALTER TABLE ... ADD COLUMN với kiểu ENUM('value1','value2',...).
Tạo bảng ban đầu
mysql> CREATE TABLE DemoTable (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(200),
-> StudentAge INT
-> );
Kiểm tra cấu trúc
mysql> DESC DemoTable;
+-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | StudentId | int(11) | NO | PRI | NULL | auto_increment | | StudentName | varchar(200) | YES | | NULL | | | StudentAge | int(11) | YES | | NULL | | +-------------+--------------+------+-----+---------+----------------+
Thêm cột ENUM StudentGender
mysql> ALTER TABLE DemoTable ADD StudentGender ENUM('Male', 'Female') NOT NULL;
Query OK, 0 rows affected (0.40 sec)
Kiểm tra cấu trúc sau thêm
mysql> DESC DemoTable;
+---------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-----------------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentName | varchar(200) | YES | | NULL | |
| StudentAge | int(11) | YES | | NULL | |
| StudentGender | enum('Male','Female') | NO | | NULL | |
+---------------+-----------------------+------+-----+---------+----------------+
Đặc điểm ENUM
- Chỉ chấp nhận các giá trị liệt kê (không phân biệt chữ hoa/thường khi so sánh)
- Lưu trữ tối ưu: 1 byte (≤255 giá trị) hoặc 2 bytes (≤65535 giá trị)
- Sắp xếp theo thứ tự định nghĩa: 'Male'=1, 'Female'=2
NOT NULLnhưng DEFAULT NULL — INSERT không cung cấp sẽ lỗi (strict mode) hoặc NULL (non-strict)
Thêm DEFAULT cho ENUM
ALTER TABLE DemoTable ADD StudentGender ENUM('Male','Female') NOT NULL DEFAULT 'Male';
Thêm cột ở vị trí cụ thể
-- Đầu bảng
ALTER TABLE DemoTable ADD StudentGender ENUM('Male','Female') FIRST;
-- Sau cột StudentName
ALTER TABLE DemoTable ADD StudentGender ENUM('Male','Female') AFTER StudentName;
Lưu ý
- Sửa đổi ENUM (thêm/bớt giá trị) cần
ALTER TABLE ... MODIFYđịnh nghĩa lại toàn bộ ENUM - ENUM không phải chuẩn SQL — cân nhắc bảng lookup (reference table) cho tính linh hoạt