MySQL การใช้งานฟังก์ชัน LAST_INSERT_ID()

ฟังก์ชัน LAST_INSERT_ID() ใน MySQL ใช้เพื่อดึงหมายเลข ID ล่าสุดที่ถูกสร้างโดยการเพิ่มข้อมูล (INSERT) ที่มีฟิลด์แบบ AUTO_INCREMENT ภายใน session ปัจจุบัน โดยจะคืนค่า ID ที่สร้างขึ้นล่าสุดเท่านั้น ไม่ว่าจะมาจากตารางใด และไม่ส่งผลกระทบต่อ session อื่น เหมาะมากสำหรับกรณีที่ต้องการทราบ ID เพื่อใช้งานต่อ เช่น insert ตารางลูก หรือทำ log

ประโยชน์ของฟังก์ชัน LAST_INSERT_ID()

  • ใช้ดึงค่า AUTO_INCREMENT ล่าสุดหลังจาก INSERT สำเร็จ
  • ใช้สร้างความสัมพันธ์ระหว่างตาราง เช่น parent-child (master-detail)
  • ปลอดภัยในกรณีที่หลาย session ใช้งานพร้อมกัน เพราะแยก session ชัดเจน
  • ใช้สำหรับอ้างอิงข้อมูลเดิมในการบันทึกหลายขั้นตอน
  • ลดความซับซ้อนของระบบโดยไม่ต้องสืบหาค่า ID เองจากตาราง

รูปแบบการใช้งาน

SELECT LAST_INSERT_ID();

ตัวอย่างการใช้งาน

SQL
INSERT INTO customers (name, email) 
VALUES ('Somchai', '[email protected]');

SELECT LAST_INSERT_ID();
-- สมมุติผลลัพธ์: 101

สมมติว่ามีตาราง 2 ตาราง ที่มีความสัมพันธ์กัน ดังนี้

ตาราง orders

order_idcustomer_nameorder_date
1Alice2024-04-01 09:00:00
2Somchai2024-04-10 10:45:00

ตาราง order_items

item_idorder_idproduct_namequantity
11Laptop1
21Mouse2
32Keyboard1

บันทึกออเดอร์ใหม่และนำ order_id ไปใช้ใน order_items

SQL
-- เพิ่มข้อมูลลงตาราง orders
INSERT INTO orders (customer_name, order_date)
VALUES ('John', NOW());

-- ใช้ LAST_INSERT_ID() เพื่ออ้างถึง order_id ที่เพิ่งเพิ่ม
INSERT INTO order_items (order_id, product_name, quantity)
VALUES
  (LAST_INSERT_ID(), 'Monitor', 1),
  (LAST_INSERT_ID(), 'HDMI Cable', 2);

หมายเหตุ

  • LAST_INSERT_ID() ทำงานแบบแยก session หมายความว่า user แต่ละคนจะได้ค่าคนละ ID กัน (ไม่ชนกัน)
  • ต้องเรียก LAST_INSERT_ID() ทันทีหลัง INSERT ที่มี AUTO_INCREMENT มิฉะนั้นอาจได้ค่าอื่น
  • หาก INSERT ล้มเหลวหรือไม่ได้ระบุค่า auto_increment ฟังก์ชัน LAST_INSERT_ID() จะไม่เปลี่ยนค่า
  • ไม่เหมาะกับการใช้ร่วมกับ INSERT ... SELECT แบบหลายแถวในบางกรณี เพราะจะได้แค่ ID แรก
แชร์เรื่องนี้