优秀的编程知识分享平台

网站首页 > 技术文章 正文

MySQL笔试题-LAST_INSERT_ID()获取最后插入记录的自增ID

nanyue 2025-05-02 20:20:29 技术文章 4 ℃

LAST_INSERT_ID()函数在MySQL中用于获取最后插入记录的自增ID值。该函数特别适用于那些具有自增主键的表,通常用于获取刚刚插入行的ID,以便进行后续操作。

一次插入多行,LAST_INSERT_ID()返回首行的id序号。

一次插入一行,LAST_INSERT_ID()返回该行的id序号。

基本用法

  1. 单条记录插入:当你向表中插入一条记录后,可以使用LAST_INSERT_ID()来获取该记录的自增ID值。例如:
INSERT INTO table_name (column1, column2) VALUES (value1, value2); SELECT LAST_INSERT_ID();

这将返回最后插入行的自增ID值。

  1. 多条记录插入:在一次性插入多条记录时,LAST_INSERT_ID()只能获取第一条插入记录的自增ID值。例如:
INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4), (value5, value6); SELECT LAST_INSERT_ID();

这将返回第一条插入记录的自增ID值。

特点和限制

  • 会话级别:LAST_INSERT_ID()函数是会话级别的,每个会话都有自己独立的最后插入ID值,不会受到其他会话的影响。
  • 自增列:该函数只能用于获取具有AUTO_INCREMENT属性的列生成的值。如果最后插入的行没有自增列或自增列未设置,则返回0。
  • 不受事务影响:即使在事务回滚后,LAST_INSERT_ID()仍然会返回已插入行的自增ID,不会因为事务回滚而改变。

使用场景和示例

  • 记录关联插入:在插入主记录后,需要立即获取其自增ID以进行关联插入。例如,在订单管理系统中插入订单记录后,立即获取订单ID以关联产品信息。
  • 存储过程和触发器:在存储过程或触发器中,可以使用LAST_INSERT_ID()来获取新插入记录的ID,并用于其他操作。
  • 确保插入顺序:在某些情况下,需要确保插入操作的顺序,可以通过LAST_INSERT_ID()来获取最新插入记录的ID,从而确定操作的顺序。
MySQL中content_table的表结构如下:
CREATE TABLE content_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    descp VARCHAR(100) NOT NULL
);
执行
INSERT INTO content_table(descp) VALUES('r1'),('r2'),('r3');
后,再执行
SELECT LAST_INSERT_ID();
的结果是()?
A. 1
B. 3
C. 4
D. 执行报错
答案: A
题目解析
选A,
一次插入多行,LAST_INSERT_ID()返回首行的id序号。
一次插入一行,LAST_INSERT_ID()返回该行的id序号。
mysql> CREATE TABLE content_table (id INT AUTO_INCREMENT PRIMARY KEY, descp VARCHAR(100) NOT NULL );
Query OK, 0 rows affected (0.02 sec)
 
 
mysql> INSERT INTO content_table(descp) VALUES('r1'),('r2'),('r3');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
 
mysql>  SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                1 | -- 一次插入多行,返回首行的id序号
+------------------+
1 row in set (0.00 sec)
 
 
mysql> select * from content_table ;
+----+-------+
| id | descp |
+----+-------+
|  1 | r1    |
|  2 | r2    |
|  3 | r3    |
+----+-------+
3 rows in set (0.00 sec)
 
 
mysql> INSERT INTO content_table(descp) VALUES('r4'),('r5'),('r6');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
 
mysql>  SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                4 | -- 一次插入多行,返回首行的id序号
+------------------+
1 row in set (0.00 sec)
 
 
mysql> select * from content_table ;
+----+-------+
| id | descp |
+----+-------+
|  1 | r1    |
|  2 | r2    |
|  3 | r3    |
|  4 | r4    |
|  5 | r5    |
|  6 | r6    |
+----+-------+
6 rows in set (0.00 sec)
 
 
mysql> INSERT INTO content_table(descp) VALUES('r7');
Query OK, 1 row affected (0.00 sec)
 
 
mysql> select * from content_table ;
+----+-------+
| id | descp |
+----+-------+
|  1 | r1    |
|  2 | r2    |
|  3 | r3    |
|  4 | r4    |
|  5 | r5    |
|  6 | r6    |
|  7 | r7    |
+----+-------+
7 rows in set (0.00 sec)
 
 
mysql>  SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                7 | -- 一次插入一行,返回该行的id序号
+------------------+
1 row in set (0.00 sec)

end

最近发表
标签列表