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

ตั้งค่า Auto Increment เริ่มต้นต่างกันสองตารางด้วย User Variable

ใช้ 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 ระบบ