Vấn đề: Sửa đổi cột hiện có để bắt buộc NOT NULL
Cột UserName hiện cho phép NULL. Cần thay đổi thành NOT NULL.
Giải pháp: ALTER TABLE ... MODIFY COLUMN ... NOT NULL
1. Tạo bảng (UserName cho phép NULL)
CREATE TABLE DemoTable (
UserId INT,
UserName VARCHAR(20)
);
2. Thay đổi cột thành NOT NULL
ALTER TABLE DemoTable
MODIFY UserName VARCHAR(20) NOT NULL;
3. Kiểm tra cấu trúc (DESC)
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| UserId | int(11) | YES | | NULL | |
| UserName | varchar(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
Cột Null = NO → NOT NULL.
4. Test chèn NULL (sẽ lỗi)
INSERT INTO DemoTable VALUES (101, NULL);
ERROR 1048 (23000): Column 'UserName' cannot be null
5. Chèn hợp lệ
INSERT INTO DemoTable VALUES (101, 'Chris'), (102, 'Bob');
Lưu ý quan trọng
- Nếu bảng đã có dữ liệu NULL trong cột này,
ALTER TABLE ... NOT NULLsẽ THẤT BẠI. Phải cập nhật NULL thành giá trị mặc định trước:UPDATE DemoTable SET UserName = 'Unknown' WHERE UserName IS NULL; ALTER TABLE DemoTable MODIFY UserName VARCHAR(20) NOT NULL; MODIFYgiữ nguyên tên cột. DùngCHANGEnếu muốn đổi tên cột.- Có thể kết hợp nhiều thay đổi:
MODIFY UserName VARCHAR(50) NOT NULL DEFAULT 'Guest'.
Best practice
- Thiết kế NOT NULL từ đầu khi tạo bảng (
CREATE TABLE ... col VARCHAR(20) NOT NULL). - Dùng
DEFAULTđể tránh phải cung cấp giá trị khi INSERT.