程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL的LAST_INSERT_ID用法

MySQL的LAST_INSERT_ID用法

編輯:MySQL綜合教程


MySQL的LAST_INSERT_ID用法   LAST_INSERT_ID() 自動返回最後一個INSERT或 UPDATE 查詢中 AUTO_INCREMENT列設置的第一個表發生的值。 MySQL 的LAST_INSERT_ID 的注意事項: 第一 、查詢和插入所使用的Connection對象必須是同一個才可以,否則返回值是不可預料的。 mysql> SELECT LAST_INSERT_ID();         -> 100 使用這函數向一個給定Connection對象返回的值是該Connection對象產生對影響AUTO_INCREMENT列的最新語句第一個AUTO_INCREMENT值的。這個值不能被其它Connection對象的影響,即它們產生它們自己的AUTO_INCREMENT值。  www.2cto.com   第二 、LAST_INSERT_ID 是與table無關的,如果向表a插入數據後,再向表b插入數據,LAST_INSERT_ID返回表b中的Id值。 第三 、 假如你使用一條INSERT語句插入多個行,  LAST_INSERT_ID() 只返回插入的第一行數據時產生的值。其原因是這使依靠其它服務器復制同樣的 INSERT語句變得簡單。 mysql> INSERT INTO t VALUES     -> (NULL, ‘Mary’), (NULL, ‘Jane’), (NULL, ‘Lisa’); mysql> SELECT * FROM t; | id | name | +—-+——+ |  1 | Bob  | |  2 | Mary | |  3 | Jane | |  4 | Lisa | mysql> SELECT LAST_INSERT_ID();  //這就是我要說明的關鍵問題。 | LAST_INSERT_ID() | |                2 | 雖然將3 個新行插入 t, 對這些行的第一行產生的 ID 為 2, 這也是 LAST_INSERT_ID()返回的值。 第四 、假如你使用 INSERT IGNORE而記錄被忽略,則AUTO_INCREMENT 計數器不會增量,而 LAST_INSERT_ID() 返回0, 這反映出沒有插入任何記錄。  www.2cto.com  
  一般情況下獲取剛插入的數據的id,使用select max(id) from table 是可以的。但在多線程情況下,就不行了。在多用戶交替插入數據的情況下max(id)顯然不能用。這就該使用LAST_INSERT_ID了,因為LAST_INSERT_ID是基於Connection的,只要每個線程都使用獨立的Connection對象,LAST_INSERT_ID函數將返回該Connection對AUTO_INCREMENT列最新的insert or update操作生成的第一個record的ID。LAST_INSERT_ID是基於單個connection的, 不可能被其它的客戶端連接改變。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved