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

ดึง Auto Increment ID หลัง INSERT ใน MySQL (LAST_INSERT_ID)

ใช้ 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/DriverMethod
MySQL CLISELECT 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 แถวแรกเท่านั้น