网站首页 > 技术文章 正文
LAST_INSERT_ID()函数在MySQL中用于获取最后插入记录的自增ID值。该函数特别适用于那些具有自增主键的表,通常用于获取刚刚插入行的ID,以便进行后续操作。
一次插入多行,LAST_INSERT_ID()返回首行的id序号。
一次插入一行,LAST_INSERT_ID()返回该行的id序号。
基本用法
- 单条记录插入:当你向表中插入一条记录后,可以使用LAST_INSERT_ID()来获取该记录的自增ID值。例如:
INSERT INTO table_name (column1, column2) VALUES (value1, value2); SELECT LAST_INSERT_ID();
这将返回最后插入行的自增ID值。
- 多条记录插入:在一次性插入多条记录时,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
猜你喜欢
- 2025-07-27 MySql:DML数据操作语句盘点(数据库操作dml语句)
- 2025-07-27 MySQL消息系统铁三角:去重保序+死信队列破解重复消费与消息黑洞
- 2025-07-27 吃透3大Binlog模式,MySQL数据零丢失
- 2025-07-27 告别繁琐!MySQL数据搬家,这几招让你轻松搞定!
- 2025-07-27 create index a on t(ct DESC)mysql8索引可以指定排序方式提高性能
- 2025-07-27 MySQL基础篇:DQL数据查询操作(mysql查询教程)
- 2025-07-27 MySQL 生产流程监控咋选库?这俩常用工具手把手教你
- 2025-07-27 MySQL--多表连接查询(mysql多表连接查询时的关键字)
- 2025-07-27 MySQL--索引(mysql索引是什么)
- 2025-07-27 MySql:DQL 数据查询语句盘点(mysql查询语句菜鸟教程)
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)