ใช้ LAST_INSERT_ID() และ User-Defined Variable
เมื่อต้องการให้ตารางที่สองเริ่ม Auto Increment จากค่าที่ต่างจากตารางแรก (เช่น ตารางแรกเริ่ม 1, ตารางที่สองเริ่ม 2) สามารถใช้ LAST_INSERT_ID() เก็บไว้ใน User Variable แล้วนำไปใช้
ขั้นตอนการทำงาน
-- 1. สร้างตารางแรก มี Auto Increment ปกติ
CREATE TABLE DemoTable1 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
-- 2. Insert ข้อมูล 1 แถว
INSERT INTO DemoTable1 VALUES(NULL);
-- StudentId จะได้ค่า 1
-- 3. เก็บค่า Last Insert ID ไว้ใน User Variable
SET @studentId = LAST_INSERT_ID(); -- @studentId = 1
-- 4. สร้างตารางที่สอง (ไม่ต้องมี Auto Increment)
CREATE TABLE DemoTable2 (Id INT);
-- 5. Insert โดยใช้ค่าจาก Variable + 1
INSERT INTO DemoTable2 VALUES(@studentId + 1); -- จะได้ค่า 2
ผลลัพธ์
-- DemoTable1
+-----------+
| StudentId |
+-----------+
| 1 |
+-----------+
-- DemoTable2
+------+
| Id |
+------+
| 2 |
+------+
กรณีใช้งานจริง (Real-world Use Case)
- ระบบที่มีหลายตารางต้องการ ID ไม่ซ้ำกันทั่วระบบ (Global Unique ID)
- Sharding/Partitioning ที่แต่ละ Shard ต้องมี ID Range ต่างกัน
- Migration ข้อมูลจากหลายระบบมารวมกัน ต้องการแยก Range ID
วิธีทางเลือก: ตั้งค่า AUTO_INCREMENT โดยตรง
-- ตั้งค่าเริ่มต้นของ Auto Increment ตรงในตาราง
ALTER TABLE DemoTable2 AUTO_INCREMENT = 1000;
INSERT INTO DemoTable2 VALUES(NULL); -- จะได้ 1000
INSERT INTO DemoTable2 VALUES(NULL); -- จะได้ 1001
หมายเหตุ: วิธี User Variable เหมาะสำหรับ Logic แบบ Dynamic (ขึ้นอยู่กับค่าที่เพิ่ง Insert) ส่วน ALTER TABLE เหมาะสำหรับตั้งค่าเริ่มต้นคงที่ตอน Setup ระบบ