首页 > 编程笔记

MySQL LAST_INSERT_ID()函数的用法

在 MySQL 中,LAST_INSERT_ID() 函数返回最后生成的 AUTO_INCREMENT 值。

【实例】使用 SELECT LAST_INSERT_ID 查看最后一个自动生成的列值。

1) 一次插入一条记录。首先创建表 worker,其 Id 字段带有 AUTO_INCREMENT 约束,输入语句如下:
mysql> CREATE TABLE worker(Id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, Name VARCHAR(30));
分别单独向表 worker 中插入两条记录:
mysql> INSERT INTO worker VALUES(NULL, 'jimy');
mysql> INSERT INTO worker VALUES(NULL, 'Tom');
mysql> SELECT * FROM worker;
+----+------+
| Id | Name |
+----+------+
|  1 | jimy |
|  2 | Tom  |
+----+------+
查看已经插入的数据可以发现,最后一条插入的记录的 Id 字段值为 2,使用 LAST_INSERT_ID() 查看最后自动生成的 Id 值:
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              2   |
+------------------+
可以看到,一次插入一条记录时,返回值为最后一条插入记录的 Id 值。

2) 一次同时插入多条记录。接下来,向表中插入多条记录,输入语句如下:
mysql> INSERT INTO worker VALUES  (NULL, 'Kevin'),(NULL,'Michal'),(NULL,'Nick');
查询已经插入的记录:
mysql> SELECT * FROM worker;
+----+--------+
| Id | Name   |
+----+--------+
|  1 | jimy   |
|  2 | Tom    |
|  3 | Kevin  |
|  4 | Michal |
|  5 | Nick   |
+----+--------+
可以看到最后一条记录的 Id 字段值为 5,使用 LAST_INSERT_ID() 查看最后自动生成的 Id 值:
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|              3   |
+------------------+
结果显示,LAST_INSERT_ID 值不是 5 而是 3,这是为什么呢?

在向数据表中插入一条新记录时,LAST_INSERT_ID() 返回带有 AUTO_INCREMENT 约束的字段最新生成的值 2;继续向表中同时添加 3 条记录,读者可能以为这时 LAST_INSERT_ID 值为 5,可显示结果却为 3,这是因为当使用一条 INSERT 语句插入多行时,LAST_INSERT_ID() 只返回插入的第一行数据时产生的值,在这里为第 3 条记录。之所以这样,是因为这使依靠其他服务器复制同样的 INSERT 语句变得简单。

提示,LAST_INSERT_ID 是与数据表无关的,如果向表 a 插入数据后再向表 b 插入数据,那么 LAST_INSERT_ID 返回表 b 中的 Id 值。

推荐阅读

副业交流群 关注微信公众号,加入副业交流群,学习变现经验,交流各种打法。