แก้ไขคอลัมน์ ENUM เพิ่มค่าใหม่โดยไม่สูญเสียข้อมูล
ใช้ ALTER TABLE ... MODIFY COLUMN ระบุค่าเก่าครบถ้วน พร้อมค่าใหม่ที่ต้องการเพิ่ม
รูปแบบคำสั่ง (Syntax)
ALTER TABLE yourTableName
MODIFY COLUMN yourColumnName ENUM('old1','old2',...,'new1','new2',...);
ตัวอย่างการใช้งาน
สร้างตาราง EnumDemo มี 2 ค่า:
CREATE TABLE EnumDemo (
AllColors ENUM('RED', 'GREEN')
);
เพิ่มค่า YELLOW และ BLUE:
ALTER TABLE EnumDemo
MODIFY COLUMN AllColors ENUM('RED', 'GREEN', 'YELLOW', 'BLUE');
ตรวจสอบโครงสร้าง:
SHOW CREATE TABLE EnumDemo;
ผลลัพธ์:
CREATE TABLE `enumdemo` (
`AllColors` enum('RED','GREEN','YELLOW','BLUE') DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
ข้อควรระวัง
- ต้องระบุค่าเก่าทั้งหมดครบถ้วน ไม่อาจเพิ่มแค่ค่าใหม่ได้
- ลำดับค่ามีความสำคัญ (Index เริ่มจาก 1)
- ไม่สามารถลบค่าที่มีข้อมูลอยู่ได้ (จะ Error)
- การเปลี่ยนลำดับอาจส่งผลต่อค่าที่เก็บอยู่ (เก็บเป็น Index)
ทางเลือกอื่น: ใช้ VARCHAR + CHECK CONSTRAINT (MySQL 8.0.16+)
ALTER TABLE EnumDemo
MODIFY COLUMN AllColors VARCHAR(20),
ADD CONSTRAINT chk_colors CHECK (AllColors IN ('RED','GREEN','YELLOW','BLUE','PURPLE'));
วิธีนี้ยืดหยุ่นกว่า เพิ่ม/ลบค่าได้ง่ายด้วย ALTER TABLE DROP/ADD CONSTRAINT