คำสั่ง ALTER TABLE ... CHANGE
CHANGE ใช้สำหรับ เปลี่ยนชื่อ Column และ/หรือ เปลี่ยน Data Type/Attributes พร้อมกัน
Syntax
ALTER TABLE table_name
CHANGE old_column_name new_column_name column_definition;
ตัวอย่าง: เปลี่ยนชื่อ Column Name → StudentName
CREATE TABLE DemoTable796 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(100),
StudentAge INT
);
-- ตรวจสอบโครงสร้างก่อน
DESC DemoTable796;
-- เปลี่ยนชื่อ Column
ALTER TABLE DemoTable796
CHANGE Name StudentName VARCHAR(100);
-- ตรวจสอบหลังเปลี่ยน
DESC DemoTable796;
ก่อนเปลี่ยน:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(100) | YES | | NULL | |
| StudentAge | int(11) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
หลังเปลี่ยน:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentName | varchar(100) | YES | | NULL | |
| StudentAge | int(11) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
CHANGE vs MODIFY vs RENAME COLUMN
| คำสั่ง | เปลี่ยนชื่อได้ไหม | เปลี่ยน Data Type ได้ไหม | รองรับ MySQL Version |
|---|---|---|---|
| CHANGE | ได้ | ได้ | ทุก Version |
| MODIFY | ไม่ได้ | ได้ | ทุก Version |
| RENAME COLUMN | ได้ | ไม่ได้ | 8.0+ |
ตัวอย่าง MODIFY (เปลี่ยน Type อย่างเดียว)
-- เปลี่ยน VARCHAR(100) → VARCHAR(200) และเพิ่ม NOT NULL
ALTER TABLE DemoTable796
MODIFY StudentName VARCHAR(200) NOT NULL;
ตัวอย่าง RENAME COLUMN (MySQL 8.0+)
-- เปลี่ยนชื่ออย่างเดียว ไม่ต้องระบุ Data Type ซ้ำ
ALTER TABLE DemoTable796
RENAME COLUMN StudentName TO FullName;
ข้อควรระวัง
- CHANGE ต้องระบุ Column Definition ครบ (Type, Null, Default, Comment) - ไม่อยากเปลี่ยนก็ต้อง Copy มาใหม่
- Foreign Key: ถ้าคอลัมน์ถูก Reference โดย FK ต้อง Drop FK ก่อน
- Index: Index บนคอลัมน์จะยังคงอยู่ (ยกเว้น Primary Key)
- View/Stored Procedure: อาจ Broken หากอ้างอิงชื่อคอลัมน์เก่า
- Replication: ต้อง Run บน Master และ Slave ให้ตรงกัน
Best Practice
- Backup ก่อน ALTER TABLE ตารางใหญ่
- ใช้
pt-online-schema-change(Percona Toolkit) สำหรับตาราง Production ใหญ่ เพื่อไม่ Lock ตาราง - ทดสอบบน Staging ก่อน Production