ฟังก์ชัน 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_id | customer_name | order_date |
|---|---|---|
| 1 | Alice | 2024-04-01 09:00:00 |
| 2 | Somchai | 2024-04-10 10:45:00 |
ตาราง order_items
| item_id | order_id | product_name | quantity |
|---|---|---|---|
| 1 | 1 | Laptop | 1 |
| 2 | 1 | Mouse | 2 |
| 3 | 2 | Keyboard | 1 |
บันทึกออเดอร์ใหม่และนำ 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 แรก