Thêm cột NOT NULL trong MySQL: 2 trường hợp
Trường hợp 1: Tạo bảng mới với cột NOT NULL
CREATE TABLE tenBang (
cot1 KIEU_DU_LIEU NOT NULL,
cot2 KIEU_DU_LIEU
);
Ví dụ:
CREATE TABLE NotNullAtCreationOfTable (
Id INT NOT NULL,
Name VARCHAR(100)
);
Chèn NULL vào cột NOT NULL → Lỗi:
INSERT INTO NotNullAtCreationOfTable VALUES (NULL, 'John');
-- ERROR 1048 (23000): Column 'Id' cannot be null
Chèn giá trị hợp lệ → OK:
INSERT INTO NotNullAtCreationOfTable VALUES (1, 'Carol');
Trường hợp 2: ALTER TABLE thêm cột NOT NULL vào bảng có sẵn
ALTER TABLE tenBang ADD tenCotMoi KIEU_DU_LIEU NOT NULL;
Ví dụ:
CREATE TABLE AddNotNull (Id INT, Name VARCHAR(100));
ALTER TABLE AddNotNull ADD Age INT NOT NULL;
Kiểm tra cấu trúc:
DESC AddNotNull;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | varchar(100)| YES | | NULL | |
| Age | int(11) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
Chèn NULL vào Age → Lỗi. Chèn giá trị → OK.
⚠️ Cảnh quan trọng: Bảng đã có dữ liệu
Nếu bảng đã có hàng, ADD COLUMN ... NOT NULL sẽ THẤT BẠI (không có giá trị mặc định cho hàng cũ).
Giải pháp:
- Thêm cột cho phép NULL trước:
ADD Age INT NULL - Cập nhật giá trị cho hàng cũ:
UPDATE AddNotNull SET Age = 0 WHERE Age IS NULL - Sửa cột thành NOT NULL:
ALTER TABLE AddNotNull MODIFY Age INT NOT NULL
Hoặc dùng DEFAULT khi thêm: ADD Age INT NOT NULL DEFAULT 0 (MySQL 8.0.13+ hỗ trợ).