การลบ NOT NULL Constraint ด้วย ALTER TABLE MODIFY
ใช้ ALTER TABLE ... MODIFY COLUMN เพื่อเปลี่ยนคอลัมน์จาก NOT NULL เป็น NULL ได้ (ลบข้อจำกัด)
ไวยากรณ์
ALTER TABLE yourTableName MODIFY COLUMN yourColumnName dataType;
หมายเหตุ: ไม่ต้องระบุ NOT NULL ในคำสั่ง MODIFY
ตัวอย่างการใช้งาน
สร้างตารางมี NOT NULL:
CREATE TABLE NotNullDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(20) NOT NULL,
PRIMARY KEY(Id)
);
ลอง INSERT NULL (Error):
INSERT INTO NotNullDemo(Name) VALUES(NULL);
-- ERROR 1048 (23000): Column 'Name' cannot be null
ลบ NOT NULL constraint:
ALTER TABLE NotNullDemo MODIFY COLUMN Name VARCHAR(20);
ตอนนี้ INSERT NULL ได้แล้ว:
INSERT INTO NotNullDemo(Name) VALUES(NULL);
INSERT INTO NotNullDemo(Name) VALUES('Sam');
INSERT INTO NotNullDemo(Name) VALUES(NULL);
ผลลัพธ์:
+----+------+
| Id | Name |
+----+------+
| 1 | NULL |
| 2 | Sam |
| 3 | NULL |
+----+------+
ตรวจสอบโครงสร้างตาราง
DESC NotNullDemo;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
คอลัมน์ Null = YES แปลว่ารองรับ NULL แล้ว
ข้อควรระวัง
- ต้องระบุ Data Type ใหม่ทั้งหมด - MODIFY COLUMN ต้องการ definition เต็มรูปแบบ
- ข้อมูลเดิมไม่หาย - เฉพาะ constraint ที่เปลี่ยน
- Foreign Key - หากคอลัมน์เป็น FK อาจต้อง drop FK ก่อน
- Index - Index ยังคงอยู่ (ยกเว้น Primary Key)
คำสั่งที่เกี่ยวข้อง
-- เพิ่ม NOT NULL กลับ (ต้องไม่มีข้อมูล NULL อยู่)
ALTER TABLE NotNullDemo MODIFY COLUMN Name VARCHAR(20) NOT NULL;
-- เปลี่ยน Data Type พร้อมกัน
ALTER TABLE NotNullDemo MODIFY COLUMN Name VARCHAR(50) NOT NULL;