轻松掌握MySQL函数中的last_insert_id()
发布时间 - 2026-01-10 21:50:06 点击率:次前言

最近一个同事问我,为什么last_insert_id()得到的结果与预期的不一样呢,于是我就认真的去研究的一下这个参数,下面是关于last_insert_id()的详细介绍,一起来学习学习吧。
首先,举个例子
wing@3306>show create table tt; +-------+-----------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-----------------------------------------------------------------------------------------------------------------------+ | tt | CREATE TABLE `tt` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+-----------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) # 没有指定值的时候,last_insert_id()符合预期希望 wing@3306>insert into tt values(); Query OK, 1 row affected (0.00 sec) wing@3306>select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec) wing@3306>insert into tt values(); Query OK, 1 row affected (0.00 sec) wing@3306>select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 2 | +------------------+ 1 row in set (0.00 sec) # what?不是应该是5么,为什么是第一个插入的值3?last_insert_id开始有一点不符合预期了。。 wing@3306>insert into tt values(),(),(); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 wing@3306>select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 3 | +------------------+ 1 row in set (0.00 sec) wing@3306>insert into tt values(),(),(); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 wing@3306>select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 6 | +------------------+ 1 row in set (0.00 sec) # 纳尼?按照预期不是10么?为什么还是之前的6?last_insert_id()我不懂你啊。。 wing@3306>insert into tt values(10); Query OK, 1 row affected (0.01 sec) wing@3306>select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 6 | +------------------+ 1 row in set (0.00 sec)
其次,研究一下
查阅MySQL官方文档,真的太重要了。。。
官方出处:http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_last-insert-id
官方文档原话:
With no argument, LAST_INSERT_ID() returns a 64-bit value representing the first automatically generated value successfully inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement.
翻译:
没有参数的last_insert_id()返回的是最近一次针对autoincrement列执行的INSERT语句的第一个自动生成的值。
官方文档原话:
If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only. The reason for this is to make it possible to reproduce easily the same INSERT statement against some other server.
翻译:
如果你在单条INSERT语句中插入多个值,那么last_insert_id()返回的是该INSERT语句第一个自动生成的值。
然后,剖析一下
请认真阅读上述翻译中的黑色字体,牢记last_insert_id()的约束。
为什么插入指定的值,last_insert_id()就失效了呢?
官方文档明明说了,是自动生成的值啊,不是你指定的值啊,是由autoincremnt计数器自己生成的才能被last_insert_id()追踪到哇。。
为什么多值插入的时候,显示的是第一条插入值啊,last不是最后一个值的意思么啊啊啊。。
官方文档明明说了,是最近一次的INSERT语句**自动生成的第一个值**哇哇哇。。
总结
记住last_insert_id()的约束。最近一次INSERT语句在autpincrement列上自动生成的第一个值。总结的这句话比翻译的那句话感觉顺口多了==
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# mysql
# last
# insert
# id
# sql
# Mysql中LAST_INSERT_ID()的函数使用详解
# MySQL中LAST_INSERT_ID()函数的实现
# 第一个
# 的是
# 自动生成
# 文档
# 说了
# 我就
# 好了
# 多个
# 是由
# 你在
# 问我
# 这句话
# 详细介绍
# 不符合
# 这篇文章
# 要了
# 第一条
# 你啊
# 太重
# 啊啊啊
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在腾讯云服务器快速搭建个人网站?
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
原生JS实现图片轮播切换效果
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
微信小程序 配置文件详细介绍
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel storage目录权限问题_Laravel文件写入权限设置
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Java解压缩zip - 解压缩多个文件或文件夹实例
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
javascript基于原型链的继承及call和apply函数用法分析
iOS发送验证码倒计时应用
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Laravel如何为API生成Swagger或OpenAPI文档
如何自定义建站之星网站的导航菜单样式?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何用wdcp快速搭建高效网站?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
如何在Windows虚拟主机上快速搭建网站?
JavaScript如何实现倒计时_时间函数如何精确控制
iOS验证手机号的正则表达式
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何在橙子建站上传落地页?操作指南详解
如何登录建站主机?访问步骤全解析
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Laravel怎么在Blade中安全地输出原始HTML内容
如何在万网利用已有域名快速建站?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
浅谈javascript alert和confirm的美化
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
如何快速搭建支持数据库操作的智能建站平台?
,交易猫的商品怎么发布到网站上去?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
香港服务器租用每月最低只需15元?
如何快速生成ASP一键建站模板并优化安全性?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Android 常见的图片加载框架详细介绍
如何快速生成橙子建站落地页链接?
Laravel如何使用查询构建器?(Query Builder高级用法)

