ใช้ LAST_INSERT_ID() ได้ ID ที่เพิ่ง Generate จาก AUTO_INCREMENT ใน Session นี้เท่านั้น (Thread-safe)
สร้างตาราง
mysql> CREATE TABLE LastInsertRecordIdDemo (
-> id INT AUTO_INCREMENT,
-> value VARCHAR(100),
-> PRIMARY KEY(id)
-> );
Insert และดู ID
mysql> INSERT INTO LastInsertRecordIdDemo VALUES (1, 'Low'); mysql> INSERT INTO LastInsertRecordIdDemo VALUES (LAST_INSERT_ID(), 'High'); -- ใช้ ID เดิม (1) mysql> SELECT * FROM LastInsertRecordIdDemo; +----+-------+ | id | value | +----+-------+ | 1 | Low | | 2 | High | +----+-------+
สังเกต: INSERT ครั้งที่ 2 ใช้ LAST_INSERT_ID() = 1 แต่ MySQL สร้าง ID ใหม่เป็น 2 เพราะ PK Unique
Insert ต่อด้วย +1
mysql> INSERT INTO LastInsertRecordIdDemo VALUES (LAST_INSERT_ID()+1, 'Medium'); mysql> SELECT * FROM LastInsertRecordIdDemo; +----+--------+ | id | value | +----+--------+ | 1 | Low | | 2 | High | | 3 | Medium | +----+--------+
ใน Application Code (สำคัญ)
| Language/Driver | Method |
|---|---|
| MySQL CLI | SELECT LAST_INSERT_ID(); |
| Python (PyMySQL) | cursor.lastrowid |
| Python (mysqlclient) | conn.insert_id() |
| PHP (mysqli) | $mysqli->insert_id |
| PHP (PDO) | $pdo->lastInsertId() |
| Node.js (mysql2) | result.insertId |
| Java (JDBC) | stmt.getGeneratedKeys() |
| Go (database/sql) | result.LastInsertId() |
ข้อควรระวัง: LAST_INSERT_ID() เป็น Per-Session ไม่ได้กระทบโดย Connection อื่น แต่ถ้า INSERT หลายแถวพร้อมกัน (Multi-row INSERT) จะคืน ID แถวแรกเท่านั้น