การเพิ่มคอลัมน์ใหม่พร้อมค่า Default ด้วย ALTER TABLE
คำสั่ง ALTER TABLE ... ADD COLUMN เพิ่มคอลัมน์ใหม่เข้าไปในตารางที่มีอยู่แล้ว สามารถระบุ DEFAULT value เพื่อให้แถวเก่าได้ค่าอัตโนมัติ
ไวยากรณ์ (Syntax)
ALTER TABLE yourTableName
ADD COLUMN yourColumnName yourDataType DEFAULT yourValue;
ตัวอย่างการใช้งาน
สร้างตารางเดิม:
mysql> CREATE TABLE alterTableDemo (
-> Id INT, Name VARCHAR(10)
-> );
Query OK, 0 rows affected (0.69 sec)
ตรวจสอบโครงสร้าง:
mysql> DESC alterTableDemo;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
เพิ่มคอลัมน์ Age พร้อม Default 18:
mysql> ALTER TABLE alterTableDemo ADD COLUMN Age INT DEFAULT 18;
Query OK, 0 rows affected (0.67 sec)
Records: 0 Duplicates: 0 Warnings: 0
ตรวจสอบโครงสร้างใหม่:
mysql> DESC alterTableDemo;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Age | int(11) | YES | | 18 | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
ทดสอบ INSERT ไม่ระบุ Age (จะได้ Default 18):
mysql> INSERT INTO alterTableDemo(Id, Name, Age) VALUES(100, 'Chris', 24);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO alterTableDemo(Id, Name) VALUES(101, 'Robert');
Query OK, 1 row affected (0.25 sec)
ผลลัพธ์:
mysql> SELECT * FROM alterTableDemo;
+------+--------+------+
| Id | Name | Age |
+------+--------+------+
| 100 | Chris | 24 |
| 101 | Robert | 18 |
+------+--------+------+
2 rows in set (0.00 sec)
คำอธิบายและตัวเลือกเพิ่มเติม
DEFAULT 18ใช้กับแถวเก่า (Existing rows) และแถวใหม่ที่ไม่ระบุค่าNOT NULL DEFAULT 18ห้าม NULL และมี DefaultFIRSTหรือAFTER column_nameระบุตำแหน่งคอลัมน์:ADD COLUMN Age INT DEFAULT 18 AFTER Name- MySQL 8.0.12+ รองรับ
ADD COLUMN ... INVISIBLEซ่อนจาก SELECT *
ข้อควรระวังตารางใหญ่
การ ADD COLUMN พร้อม DEFAULT บนตารางขนาดใหญ่ (ล้านแถวขึ้นไป) อาจใช้เวลานานและ Lock ตาราง (MySQL < 8.0) MySQL 8.0+ ใช้ Instant ADD COLUMN สำหรับบางกรณี (ไม่ต้อง Rebuild ตาราง) ตรวจสอบด้วย EXPLAIN หรือดู Log