ใช้ ALTER TABLE ... MODIFY COLUMN เพื่อเพิ่ม NOT NULL Constraint ให้คอลัมน์ที่มีอยู่แล้ว
Syntax
ALTER TABLE table_name
MODIFY COLUMN column_name data_type NOT NULL;
ตัวอย่าง
CREATE TABLE AddNotNUlldemo (
name VARCHAR(100)
);
INSERT INTO AddNotNUlldemo VALUES ('John'), ('Bob');
-- เพิ่ม NOT NULL Constraint
ALTER TABLE AddNotNUlldemo
MODIFY COLUMN name VARCHAR(100) NOT NULL;
-- Query OK, 0 rows affected (1.14 sec)
ทดสอบ Constraint
INSERT INTO AddNotNUlldemo VALUES (NULL);
-- ERROR 1048 (23000): Column 'name' cannot be null
SELECT * FROM AddNotNUlldemo;
+------+
| name |
+------+
| John |
| Bob |
+------+
⚠️ ข้อควรระวังสำคัญ
1. ต้องไม่มีข้อมูล NULL อยู่แล้ว
-- ถ้ามี NULL อยู่แล้ว จะ Error
ALTER TABLE t MODIFY col INT NOT NULL;
-- ERROR 1048: Column 'col' cannot be null (ถ้ามี NULL ในข้อมูล)
แก้ไข: Update NULL → Default Value ก่อน
UPDATE t SET col = 0 WHERE col IS NULL;
ALTER TABLE t MODIFY col INT NOT NULL;
2. ต้องระบุ Data Type ให้ครบ
-- ❌ ผิด: ไม่ระบุ Type
ALTER TABLE t MODIFY col NOT NULL;
-- ✅ ถูก: ระบุ Type ครบ
ALTER TABLE t MODIFY col VARCHAR(100) NOT NULL;
3. ใช้ CHANGE COLUMN ถ้าอยากเปลี่ยนชื่อพร้อมกัน
ALTER TABLE t CHANGE COLUMN old_name new_name VARCHAR(100) NOT NULL;
ลบ NOT NULL Constraint
ALTER TABLE table_name
MODIFY COLUMN column_name data_type NULL;
ตรวจสอบ Constraint
SHOW CREATE TABLE AddNotNUlldemo;
-- หรือ
DESC AddNotNUlldemo;
-- Null = NO หมายถึง NOT NULL
Best Practice
- ✅ ตั้ง
NOT NULL DEFAULT 'default_value'ตอน CREATE TABLE - ✅ Validate Data ก่อน ALTER (Check NULL Count)
- ✅ ใช้ Transaction หาก Critical
- ⚠️ Lock Table ระหว่าง ALTER (InnoDB: Online DDL รองรับบาง Operation)