ใช้คำสั่ง UPDATE ร่วมกับ ORDER BY ... DESC เพื่อหลีกเลี่ยงข้อผิดพลาด Duplicate Key เมื่อเพิ่มค่า Primary Key
รูปแบบคำสั่ง
UPDATE yourTableName SET yourIdColumnName = yourIdColumnName + 1 ORDER BY yourIdColumnName DESC;
ตัวอย่าง
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table IdColumnadd1Demo (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY); mysql> insert into IdColumnadd1Demo values(); -- 8 ครั้ง
2. ข้อมูลก่อนอัปเดต
+----+ | Id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | +----+
3. อัปเดต ID +1 (สำคัญ: ORDER BY DESC)
mysql> update IdColumnadd1Demo set Id = Id + 1 Order By Id DESC;
4. ข้อมูลหลังอัปเดต
+----+ | Id | +----+ | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | +----+
ทำไมต้อง ORDER BY DESC?
- หากอัปเดตจากค่าน้อยไปมาก: ID 1 → 2 (ชนกับ ID 2 เดิม) → Error Duplicate Entry
- อัปเดตจากค่ามากไปน้อย: ID 8 → 9, ID 7 → 8, ... ID 1 → 2 ไม่มีการชนกัน
⚠️ ข้อควรระวัง
- ต้องปิด
FOREIGN_KEY_CHECKSถ้ามีตารางอื่นอ้างอิง (FK) AUTO_INCREMENTจะไม่เปลี่ยน ใช้ALTER TABLE ... AUTO_INCREMENT = 新值ถ้าต้องการปรับ- ไม่แนะนำให้ทำกับ Primary Key ในระบบ Production ที่มีการอ้างอิง
คำสั่งครบถ้วนสำหรับ Production
SET FOREIGN_KEY_CHECKS = 0; UPDATE yourTable SET id = id + 1 ORDER BY id DESC; ALTER TABLE yourTable AUTO_INCREMENT = (SELECT MAX(id) + 1 FROM yourTable); SET FOREIGN_KEY_CHECKS = 1;