源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-04-04 22:52 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:轻松掌握MySQL函数中的last_insert_id()
[b]前言[/b] 最近一个同事问我,为什么[code]last_insert_id()[/code]得到的结果与预期的不一样呢,于是我就认真的去研究的一下这个参数,下面是关于[code]last_insert_id()[/code]的详细介绍,一起来学习学习吧。 [b]首先,举个例子[/b]
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)
[b]其次,研究一下[/b] 查阅MySQL官方文档,真的太重要了。。。 官方出处:http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_last-insert-id [b]官方文档原话:[/b] 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. [b]翻译:[/b] 没有参数的[code]last_insert_id()[/code]返回的是最近一次针对autoincrement列执行的[code]INSERT[/code]语句的第一个自动生成的值。 [b]官方文档原话:[/b] 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. [b]翻译:[/b] 如果你在单条[code]INSERT[/code]语句中插入多个值,那么[code]last_insert_id()[/code]返回的是该[code]INSERT[/code]语句第一个自动生成的值。 [b]然后,剖析一下 [/b] 请认真阅读上述翻译中的黑色字体,牢记[code]last_insert_id()[/code]的约束。 为什么插入指定的值,[code]last_insert_id()[/code]就失效了呢? 官方文档明明说了,是自动生成的值啊,不是你指定的值啊,是由autoincremnt计数器自己生成的才能被[code]last_insert_id()[/code]追踪到哇。。 为什么多值插入的时候,显示的是第一条插入值啊,[code]last[/code]不是最后一个值的意思么啊啊啊。。 官方文档明明说了,是最近一次的[code]INSERT[/code]语句**自动生成的第一个值**哇哇哇。。 [b]总结 [/b] 记住[code]last_insert_id()[/code]的约束。最近一次[code]INSERT[/code]语句在autpincrement列上自动生成的第一个值。总结的这句话比翻译的那句话感觉顺口多了== 好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部