บทนำ
หากสร้างตารางโดยไม่ได้ตั้งค่า NOT NULL ให้คอลัมน์ สามารถเพิ่ม Constraint นี้ภายหลังได้ด้วยคำสั่ง ALTER TABLE ... MODIFY
ตัวอย่างการสร้างตาราง (StudentName ยังไม่ NOT NULL)
mysql> CREATE TABLE DemoTable (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(100)
-> );
Query OK, 0 rows affected (0.86 sec)
ตรวจสอบโครงสร้างก่อน ALTER
mysql> DESC DemoTable;
ผลลัพธ์
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentName | varchar(100) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
สังเกต: StudentName มี Null = YES
คำสั่งเพิ่ม NOT NULL Constraint
mysql> ALTER TABLE DemoTable
-> MODIFY StudentName VARCHAR(100) NOT NULL;
Query OK, 0 rows affected (1.57 sec)
Records: 0 Duplicates: 0 Warnings: 0
ตรวจสอบโครงสร้างหลัง ALTER
mysql> DESC DemoTable;
ผลลัพธ์
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentName | varchar(100) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
ตอนนี้ StudentName มี Null = NO แล้ว
ข้อควรระวังสำคัญ
- ต้องไม่มีข้อมูล NULL อยู่ในคอลัมน์นั้นแล้ว มิฉะนั้น ALTER จะล้มเหลว
- ต้องระบุชนิดข้อมูล (Data Type) ให้ครบถ้วนเหมือนเดิม (VARCHAR(100) NOT NULL)
- ใช้
MODIFYสำหรับเปลี่ยน Definition,CHANGEสำหรับเปลี่ยนชื่อ + Definition
ตรวจสอบข้อมูล NULL ก่อน ALTER
SELECT * FROM DemoTable WHERE StudentName IS NULL;
-- หากมีผลลัพธ์ ต้อง UPDATE ให้มีค่าก่อน
UPDATE DemoTable SET StudentName = 'Unknown' WHERE StudentName IS NULL;
คำสั่ง MODIFY อื่นๆ ที่ใช้บ่อย
-- เปลี่ยนชนิดข้อมูล
ALTER TABLE DemoTable MODIFY StudentAge SMALLINT;
-- เปลี่ยนชนิดข้อมูล + เพิ่ม NOT NULL + DEFAULT
ALTER TABLE DemoTable MODIFY StudentAge SMALLINT NOT NULL DEFAULT 0;
-- เปลี่ยนชื่อคอลัมน์ + ชนิดข้อมูล
ALTER TABLE DemoTable CHANGE StudentName FullName VARCHAR(100) NOT NULL;