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

จอง Auto Increment ID ใน MySQL

Technique: จองค่า Auto Increment ด้วย Transaction + Rollback

ใช้ Transaction Insert แล้ว Rollback เพื่อ "ข้าม" ค่า Auto Increment ไปข้างหน้า

ไวยากรณ์

START TRANSACTION;
INSERT INTO yourTable VALUES (), (), (), ();
ROLLBACK;
SELECT LAST_INSERT_ID() INTO @variable;

ตัวอย่าง

CREATE TABLE reservingAutoIncrementDemo (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);

START TRANSACTION;
INSERT INTO reservingAutoIncrementDemo VALUES (), (), (), ();
SELECT * FROM reservingAutoIncrementDemo; -- ได้ ID 1,2,3,4
ROLLBACK;

ตรวจสอบค่าที่จองไว้

SELECT LAST_INSERT_ID() INTO @IncrementedValue;
SELECT @IncrementedValue;
+-------------------+
| @IncrementedValue |
+-------------------+
| 1                 |
+-------------------+

การทำงาน

  • INSERT 4 แถว → Auto Increment กระโดดเป็น 5
  • ROLLBACK → ข้อมูลหาย แต่ Auto Increment Counter ไม่ย้อนกลับ (InnoDB behavior)
  • LAST_INSERT_ID() = 1 (ค่าแรกของชุดที่ Insert)
  • Insert ถัดไปจะเริ่มที่ 5

กรณีใช้งาน

  • จองช่วง ID สำหรับระบบภายนอก
  • ป้องกันชน ID ระหว่าง Shard/Cluster
  • สร้าง Gap เพื่อการจัดกลุ่มข้อมูล

ข้อควรระวัง

InnoDB ไม่ Reuse Auto Increment หลัง Rollback (คงที่ตั้งแต่ MySQL 8.0) MyISAM อาจ Reuse ได้