วิธีจัดเรียงลำดับคอลัมน์
MySQL รองรับการเปลี่ยนลำดับคอลัมน์ด้วย ALTER TABLE ... CHANGE COLUMN ... FIRST|AFTER
ย้ายคอลัมน์ไปหน้าสุด (FIRST)
ALTER TABLE your_table
CHANGE COLUMN column_name column_name data_type FIRST;
ย้ายคอลัมน์ไปหลังคอลัมน์อื่น (AFTER)
ALTER TABLE your_table
CHANGE COLUMN column_name column_name data_type AFTER other_column;
ตัวอย่างการใช้งาน
ตารางเดิม: AddColumn (StudentId, StudentName)
SHOW CREATE TABLE AddColumn;
CREATE TABLE `addcolumn` (
`StudentId` varchar(50) DEFAULT NULL,
`StudentName` varchar(300) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
ย้าย StudentName ไปหน้า StudentId
ALTER TABLE AddColumn
CHANGE COLUMN StudentName StudentName VARCHAR(300) FIRST;
ตรวจสอบโครงสร้างหลังจัดเรียง
DESC AddColumn;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| StudentName | varchar(300) | YES | | NULL | |
| StudentId | varchar(50) | YES | | NULL | |
+-------------+--------------+------+-----+---------+-------+
ย้ายกลับไปเดิม (StudentName หลัง StudentId)
ALTER TABLE AddColumn
CHANGE COLUMN StudentName StudentName VARCHAR(300) AFTER StudentId;
ข้อควรระวัง
- ต้องระบุ
data_typeซ้ำแม้จะไม่เปลี่ยนชนิดข้อมูล - ตารางใหญ่จะใช้เวลานาน (Table Rebuild) - Lock ตารางขณะดำเนินการ
- InnoDB: ใช้ Online DDL (ALGORITHM=INPLACE) ได้ในบางกรณี
- ควรทดสอบใน Staging ก่อน Production
วิธีอื่น: CREATE TABLE NEW ... SELECT
CREATE TABLE new_table AS
SELECT col3, col1, col2 FROM old_table;
-- แล้ว DROP ตารางเก่า RENAME ตารางใหม่
วิธีนี้เร็วกว่าสำหรับตารางใหญ่มาก แต่ต้องจัดการ Index/Constraint เอง