MySQL last_insert_id()函式

2019-10-16 22:55:28

在本教學中,您將學習如何使用MySQL LAST_INSERT_ID函式來獲取最後插入行的生成序列號。

MySQL LAST_INSERT_ID函式簡介

在資料庫設計中,我們經常使用代理鍵使用AUTO_INCREMENT屬性為主鍵列生成唯一的整數值。

當您將新行插入到具有AUTO_INCREMENT列的表中時,MySQL會自動生成一個唯一的整數,並將其作為主鍵列的值。

有關如何設定列的AUTO_INCREMENT屬性的更多資訊,請檢視MySQL序列教學。

您可以使用MySQL LAST_INSERT_ID函式獲取生成的序列號,並此數位值使用在下一個語句中,例如:將其值作為新行的一個值插入到相關表中。

MySQL LAST_INSERT_ID範例

我們來看一下使用MySQL LAST_INSERT_ID函式的例子。

首先,建立一個名為tbl的新表進行測試。在tbl表中,在id列上設定了AUTO_INCREMENT屬性。

USE testdb;

CREATE TABLE tbl (
    id INT AUTO_INCREMENT PRIMARY KEY,
    description VARCHAR(250) NOT NULL
);

其次,向tbl表中插入一個新行記錄。

INSERT INTO tbl(description)
VALUES('MySQL last_insert_id');

第三步,使用MySQL LAST_INSERT_ID函式來獲取MySQL生成的最後一個插入ID的值。

mysql> SELECT LAST_INSERT_ID() as lastID;
+--------+
| lastID |
+--------+
|      1 |
+--------+
1 row in set

需要注意的是,如果使用單個INSERT語句將多行插入到表中,則LAST_INSERT_ID函式將返回第一行的最後一個插入ID。

假設AUTO_INCREMENT列的當前值為1,並在表中插入3行。當您使用LAST_INSERT_ID函式獲取最後一個插入ID時,將獲得2而不是4

以下語句將向tbl表中插入3行,並使用LAST_INSERT_ID函式獲取最後一個插入ID值。

mysql> INSERT INTO tbl(description)
VALUES('record 1'),
      ('record 2'),
      ('record 3');

SELECT LAST_INSERT_ID();
Query OK, 3 rows affected
Records: 3  Duplicates: 0  Warnings: 0

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                2 |
+------------------+
1 row in set

檢視tbl表的資料:

mysql> SELECT * FROM tbl;
+----+----------------------+
| id | description          |
+----+----------------------+
|  1 | MySQL last_insert_id |
|  2 | record 1             |
|  3 | record 2             |
|  4 | record 3             |
+----+----------------------+
4 rows in set

LAST_INSERT_ID函式基於用戶端獨立原則。這意味著特定用戶端的LAST_INSERT_ID函式返回的值是該用戶端生成的值。這樣就確保每個用戶端可以獲得自己的唯一ID。

在本教學中,我們向您展示了如何使用MySQL LAST_INSERT_ID函式來獲取插入到表中的最後一行的序列號。