程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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()分析   今天跟人討論php高並發下的LAST_INSERT_ID的正確性問題,一開始大家都比較模糊,後來經過大家共同查詢資料,對這個問題有了比較清晰的了解,特發此文,以為紀念。   首先看mysql中的LAST_INSERT_ID()的官方說法:
  LAST_INSERT_ID()自動返回最後一個INSERT或UPDATE查詢中AUTO_INCREMENT列設置的第一個表發生的值。 MySQL的LAST_INSERT_ID的注意事項:
  第一、查詢和插入所使用的Connection對象必須是同一個才可以,否則返回值是不可預料的。 第二、LAST_INSERT_ID是與表無關的,如果向表a插入數據後再向表b插入數據,LAST_INSERT_ID返回表b的Id值。  www.2cto.com   第三、假如你使用一條INSERT語句插入多個行,  LAST_INSERT_ID() 只返回插入的第一行數據時產生的值。 第四、假如你使用 INSERT IGNORE而記錄被忽略,則AUTO_INCREMENT 計數器不會增量,而 LAST_INSERT_ID() 返回0, 這反映出沒有插入任何記錄。   根據這四條原則,我們討論的高並發網站訪問時的插入後取自增長值其實主要是跟第一條規則和第二條規則有關。即要保證LAST_INSERT_ID的正確性,必須同一個connection,並且LAST_INSERT_ID要緊跟在insert中執行。所以如果是數據庫緩存池公用connection可能會出問題,多線程操作在insert後面由執行了別的insert時也會出問題。   而php的數據庫連接本身是頁面級的,這樣就保證了不會出現緩沖池的情況,然後php頁面執行本身也是單線程的,這樣就保證了順序編寫的LAST_INSERT_ID肯定是緊跟在insert之後執行的,中間不會有別的insert執行。  www.2cto.com     綜上所述,php的頁面級、單線程其實已經保證了mysql的LAST_INSERT_ID天然就是正確的,跟高並發並沒有關系。即php中,mysql的LAST_INSERT_ID總是正確的,隨便用把,沒有問題的。     作者 趙開錦

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