国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

輕松掌握MySQL函數中的last_insert_id()

2024-07-24 13:11:33
字體:
來源:轉載
供稿:網友

前言

最近一個同事問我,為什么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: 0wing@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: 0wing@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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普安县| 泸定县| 长岭县| 资兴市| 白水县| 眉山市| 上犹县| 沙坪坝区| 繁昌县| 泽普县| 萨迦县| 晋城| 香格里拉县| 玉溪市| 长垣县| 英吉沙县| 清丰县| 忻州市| 宽甸| 沙河市| 辉南县| 建平县| 秦皇岛市| 永济市| 全椒县| 西青区| 科技| 盘山县| 易门县| 腾冲县| 安仁县| 洛川县| 綦江县| 临邑县| 昌图县| 武鸣县| 于田县| 黄浦区| 青岛市| 大埔区| 顺平县|