ไวยากรณ์ MODIFY หลายคอลัมน์ในคำสั่งเดียว
ใช้ ALTER TABLE ร่วมกับ MODIFY COLUMN หลายครั้ง คั่นด้วยจุลภาค:
ALTER TABLE your_table
MODIFY COLUMN col1 new_data_type,
MODIFY COLUMN col2 new_data_type,
MODIFY COLUMN col3 new_data_type;
ตัวอย่างการใช้งาน
สร้างตารางเดิม (INT, VARCHAR(200))
CREATE TABLE AddColumn (
StudentID INT,
StudentName VARCHAR(200)
);
เปลี่ยนทั้ง 2 คอลัมน์พร้อมกัน
ALTER TABLE AddColumn
MODIFY COLUMN StudentName VARCHAR(300),
MODIFY COLUMN StudentID VARCHAR(50);
ตรวจสอบโครงสร้างหลังเปลี่ยน
DESC AddColumn;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| StudentId | varchar(50) | YES | | NULL | |
| StudentName | varchar(300) | YES | | NULL | |
+-------------+--------------+------+-----+---------+-------+
MODIFY vs CHANGE
| คำสั่ง | เปลี่ยนชื่อคอลัมน์ได้ไหม | เปลี่ยน Data Type ได้ไหม | เปลี่ยนตำแหน่งได้ไหม |
|---|---|---|---|
| MODIFY COLUMN | ไม่ได้ | ได้ | ไม่ได้ (ต้องใช้ CHANGE) |
| CHANGE COLUMN | ได้ | ได้ | ได้ (FIRST/AFTER) |
ข้อควรระวัง
- Data Loss: การลดขนาด (VARCHAR(300) -> VARCHAR(50)) อาจตัดข้อมูล
- Incompatible Types: VARCHAR -> INT จะ Error หากมีข้อมูลไม่ใช่ตัวเลข
- Index/Constraint: อาจต้อง Drop Index ก่อน แล้วสร้างใหม่
- Performance: ตารางใหญ่ Lock นาน ควรใช้
pt-online-schema-change(Percona Toolkit)
MySQL 8.0+ Instant DDL
บางการเปลี่ยน Data Type รองรับ Instant (ไม่ Rebuild ตาราง) เช่น:
- ขยาย VARCHAR (เพิ่มขนาด)
- เพิ่ม/ลบ Default Value
- เพิ่ม/ลบ Column (ท้ายตาราง)