• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 轻松掌握MySQL函数中的last_insert_id()

轻松掌握MySQL函数中的last_insert_id()

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了MySQL,last_insert_id()等相关知识,希望本文的分享对您有所帮助

Mysql关系型数据库管理系统

MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。


相信大家应该都知道Mysql函数可以实现许多我们需要的功能,这篇文章介绍的Mysql函数Last_insert_id()就是其中之一,文章通过一个例子展开来讲,应该更有助于大家的理解和学习,有需要的朋友们下面来一起看看吧。

前言

最近一个同事问我,为什么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列上自动生成的第一个值。总结的这句话比翻译的那句话感觉顺口多了==

好了,以上就是这篇文章的全部内容了,更多相关内容请关注微课江湖()!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2017-05-11mysql 复制过滤重复如何解决
  • 2017-05-11mysql筛选GROUP BY多个字段组合时的用法分享
  • 2018-12-05MySQL帮助的使用
  • 2018-12-05如何修改WAMP中mysql默认空密码的方法
  • 2018-12-05实例详解2017最新版windows安装mysql教程
  • 2018-12-05sqlserver bcp(数据导入导出工具)一般用法与命令详解
  • 2018-12-05SQLServer 使用ADSI执行分布式查询ActiveDorectory对象
  • 2018-12-05动态SQL中返回数值的实现代码
  • 2018-12-05Linux上通过binlog文件恢复mysql数据库详细步骤_MySQL
  • 2018-12-05MySQL如何使用AES_ENCRYPT()与AES_DECRYPT()进行加解密的示例

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql 数据库基础笔记
    • mysql进阶(二十)CPU超负荷异常情况
    • Suse Linux 10中MySql安装与配置步骤
    • mysql的分区技术详细介绍
    • MySQL Administrator 登录报错的解决方法
    • mysql多次调用存储过程的问题
    • MySQL 事务实例教程
    • mysql实现简单查询结果添加序列号的两种方法
    • oracle 合并查询 事务 sql函数小知识学习
    • CentOS7安装和配置MySQL

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有