Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เพิ่มค่า ID ทุกแถวขึ้น 1 ด้วยคำสั่ง UPDATE เดียวใน MySQL

ใช้คำสั่ง 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;