MySQL LAST_INSERT_ID()函数的用法
在 MySQL 中,LAST_INSERT_ID() 函数返回最后生成的 AUTO_INCREMENT 值。
【实例】使用 SELECT LAST_INSERT_ID 查看最后一个自动生成的列值。
1) 一次插入一条记录。首先创建表 worker,其 Id 字段带有 AUTO_INCREMENT 约束,输入语句如下:
2) 一次同时插入多条记录。接下来,向表中插入多条记录,输入语句如下:
在向数据表中插入一条新记录时,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 值。
【实例】使用 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 值。