ใช้ ALTER TABLE ... MODIFY COLUMN (เปลี่ยน Type/Constraint คงชื่อ) หรือ CHANGE COLUMN (เปลี่ยนชื่อ + Type/Constraint)
สร้างตาราง
mysql> CREATE TABLE ModifyColumnDemo (id INT);
MODIFY COLUMN: เปลี่ยน INT → VARCHAR(10) NOT NULL
mysql> ALTER TABLE ModifyColumnDemo
-> MODIFY COLUMN id VARCHAR(10) NOT NULL;
Query OK, 0 rows affected (1.52 sec)
ตรวจสอบผลลัพธ์
mysql> DESC ModifyColumnDemo; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | varchar(10) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+
CHANGE COLUMN: เปลี่ยนชื่อ + Type
mysql> ALTER TABLE ModifyColumnDemo
-> CHANGE COLUMN id new_id VARCHAR(20) NOT NULL;
MODIFY vs CHANGE
| คำสั่ง | เปลี่ยนชื่อได้? | Syntax | Use Case |
|---|---|---|---|
| MODIFY COLUMN | ไม่ได้ | MODIFY COLUMN col_name new_definition | เปลี่ยน Type, Null, Default, Comment |
| CHANGE COLUMN | ได้ | CHANGE COLUMN old_name new_name new_definition | Rename + เปลี่ยน Definition |
ข้อควรระวัง
- การเปลี่ยน Type อาจล้มเหลวหาก Data ไม่ Convert ได้ (เช่น VARCHAR 'abc' → INT)
- ตารางใหญ่ → Lock นาน ควรใช้
pt-online-schema-change(Percona) หรือgh-ost(GitHub) - MySQL 8.0+ รองรับ
INSTANT DDLสำหรับบาง Operation (ADD COLUMN LAST, DROP COLUMN, RENAME COLUMN)
Best Practice: ทดสอบบน Staging ก่อน Production, Backup ก่อน ALTER, ใช้ Tool Online Schema Change สำหรับตาราง Production ใหญ่