MySQL自增id怎么获取

来源:网络学院作者:梦乃头衔:网络博主
导读:本期聚焦于小伙伴创作的《MySQL自增id怎么获取》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《MySQL自增id怎么获取》有用,将其分享出去将是对创作者最好的鼓励。

在MySQL数据库的使用过程中,自增id是表设计中非常常见的主键类型,当向表中插入数据时,数据库会自动为自增id字段生成唯一的递增值。很多业务场景下,我们需要在插入数据后获取到这个刚生成的自增id,用于后续的业务逻辑处理,比如关联其他表的数据、返回给前端展示等。

MySQL自增id怎么获取

获取MySQL自增id的常用方法

1. 使用LAST_INSERT_ID()函数

LAST_INSERT_ID()是MySQL内置的函数,用于返回当前连接中最近一次插入操作生成的自增id值,这是最推荐的使用方式,因为它基于连接级别生效,不会受到其他连接插入操作的影响。

示例代码如下:

-- 先插入一条数据,假设表user有自增id字段id,以及name字段
INSERT INTO user (name) VALUES ('张三');
-- 获取刚插入数据生成的自增id
SELECT LAST_INSERT_ID() AS new_id;

需要注意的是,LAST_INSERT_ID()只返回最近一次成功插入的自增id,如果插入操作没有触发自增id生成,或者插入失败,这个函数会返回0。另外,如果一次插入多行数据,它会返回这多行数据中第一个生成的自增id值。

2. 使用@@identity变量

@@identity是MySQL的全局变量,同样可以返回最近一次插入操作生成的自增id,但是它的作用范围是当前会话,而且如果插入操作触发了其他表的自增id生成(比如触发器),它返回的是最后一个触发的自增id,这一点和LAST_INSERT_ID()有区别。

示例代码如下:

INSERT INTO user (name) VALUES ('李四');
-- 获取自增id
SELECT @@identity AS new_id;

3. 查询information_schema系统表

我们可以通过查询information_schema数据库中的TABLES表,获取指定表的自增id当前值,不过这种方式获取的是表当前的自增计数器值,不是某一次插入操作生成的具体id,适合需要了解表自增进度的场景。

示例代码如下:

-- 查询user表的当前自增id值,table_schema是数据库名,table_name是表名
SELECT AUTO_INCREMENT 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'test_db' 
AND TABLE_NAME = 'user';

4. 插入后直接查询最大id

如果表中没有其他并发插入操作,可以通过查询表中id的最大值来获取刚插入的id,但是这种方式在高并发场景下非常不可靠,因为其他连接可能同时插入数据,导致查询到的最大值不是自己插入的那条。

示例代码如下:

INSERT INTO user (name) VALUES ('王五');
-- 查询最大id,仅适合无并发场景
SELECT MAX(id) AS new_id FROM user;

不同方法的对比

我们可以通过下面的表格更清晰地看到不同方法的差异:

方法作用范围是否受其他表触发器影响适用场景
LAST_INSERT_ID()当前连接单条插入后获取自增id,推荐优先使用
@@identity当前会话无触发器场景下的自增id获取
查询information_schema全局表级别查看表自增进度,非单条插入场景
查询MAX(id)全局表级别无并发的低频插入场景

编程语言中获取自增id的示例

在实际开发中,我们通常会通过编程语言操作数据库,下面以Python的pymysql库为例,展示如何获取自增id:

import pymysql

# 建立数据库连接
conn = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123456',
    database='test_db',
    charset='utf8mb4'
)
cursor = conn.cursor()
# 插入数据
sql = "INSERT INTO user (name) VALUES ('赵六')"
cursor.execute(sql)
# 获取自增id
new_id = cursor.lastrowid
print(f"刚插入的自增id是:{new_id}")
# 提交事务并关闭连接
conn.commit()
cursor.close()
conn.close()

大部分编程语言的MySQL驱动都提供了类似lastrowid的属性,底层其实就是调用了LAST_INSERT_ID()函数,使用起来更加方便。

注意事项

  • 获取自增id的操作和插入操作必须在同一个数据库连接中完成,否则无法正确获取到对应的自增id。
  • 如果插入操作使用了INSERT IGNORE或者ON DUPLICATE KEY UPDATE,如果数据没有实际插入,LAST_INSERT_ID()会返回0或者旧的自增id,需要根据实际情况判断。
  • 不要在高并发场景下使用查询MAX(id)的方式获取自增id,很容易出现数据错误。

MySQL自增idLAST_INSERT_ID@@identitySQL查询修改时间:2026-07-02 23:42:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。