การเพิ่มคอลัมน์ NOT NULL ใหม่ลงในตารางที่มีข้อมูลอยู่แล้ว จะสำเร็จก็ต่อเมื่อ ตารางว่างเปล่า หรือ ระบุ DEFAULT VALUE ไว้ มิฉะนั้นจะ Error
ตัวอย่างที่สำเร็จ (ตารางว่าง)
1. สร้างตาราง
mysql> CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(20)
);
Query OK, 0 rows affected (0.60 sec)
2. เพิ่มคอลัมน์ NOT NULL (สำเร็จเพราะตารางว่าง)
mysql> ALTER TABLE DemoTable ADD COLUMN StudentAge INT NOT NULL; Query OK, 0 rows affected (0.52 sec)
3. Insert ข้อมูล (ต้องระบุ StudentAge ทุกครั้ง)
mysql> INSERT INTO DemoTable(StudentName, StudentAge) VALUES('Chris', 21);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(StudentName, StudentAge) VALUES('David', 23);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(StudentName, StudentAge) VALUES('Mike', NULL);
ERROR 1048 (23000): Column 'StudentAge' cannot be null
4. ผลลัพธ์
mysql> SELECT * FROM DemoTable; +-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | David | 23 | +-----------+-------------+------------+
กรณีตารางมีข้อมูลอยู่แล้ว (จะ Error)
ALTER TABLE existing_table ADD COLUMN new_col INT NOT NULL; -- ERROR: Column 'new_col' cannot be null (ถ้ามีข้อมูลอยู่แล้ว)
วิธีแก้: เพิ่ม DEFAULT VALUE
-- วิธี 1: ระบุ DEFAULT ตอน ADD COLUMN ALTER TABLE existing_table ADD COLUMN new_col INT NOT NULL DEFAULT 0; -- วิธี 2: เพิ่มเป็น NULL ก่อน -> Update ค่า -> แล้วค่อย ALTER เป็น NOT NULL ALTER TABLE existing_table ADD COLUMN new_col INT NULL; UPDATE existing_table SET new_col = 0 WHERE new_col IS NULL; ALTER TABLE existing_table MODIFY COLUMN new_col INT NOT NULL;
สรุป
- ตารางว่าง:
ADD COLUMN col TYPE NOT NULLได้เลย - ตารางมีข้อมูล: ต้องมี
DEFAULT valueหรือทำ 3 ขั้นตอน (ADD NULL -> UPDATE -> MODIFY NOT NULL) - หลัง ADD NOT NULL แล้ว INSERT ต้องระบุค่าคอลัมน์นั้นทุกครั้ง