天天看點

Mysql自動增長

用MySQL 中的 SQL 函數 LAST_INSERT_ID()

LAST_INSERT_ID():

1. 産生的ID 每次連接配接後儲存在伺服器中。這意味着函數向一個給定用戶端傳回的值是該用戶端産生對影響AUTO_INCREMENT列的最新語句第一個 AUTO_INCREMENT值的。這個值不能被其它用戶端影響,即使它們産生它們自己的 AUTO_INCREMENT值。這個行為保證了你能夠找回自己的 ID 而不用擔心其它用戶端的活動,而且不需要加鎖或處理。隻要在同一個連接配接中,使用last_insert_id就能得到最後插入或者更新的id。

MySQL的LAST_INSERT_ID的注意事項:

第一、查詢和插入所使用的Connection對象必須是同一個才可以,否則傳回值是不可預料的。 第二、LAST_INSERT_ID是與表無關的,如果向表a插入資料後再向表b插入資料,LAST_INSERT_ID傳回表b的Id值。 第三、假如你使用一條INSERT語句插入多個行,  LAST_INSERT_ID() 隻傳回插入的第一行資料時産生的值。 第四、假如你使用 INSERT IGNORE而記錄被忽略,則AUTO_INCREMENT 計數器不會增量,而 LAST_INSERT_ID() 傳回0, 這反映出沒有插入任何記錄。 根據這四條原則,我們讨論的高并發網站通路時的插入後取自增長值其實主要是跟第一條規則和第二條規則有關。即要保證LAST_INSERT_ID的正确性,必須同一個connection,并且LAST_INSERT_ID要緊跟在insert中執行。是以如果是資料卡緩存池公用connection可能會出問題,多線程操作在insert後面由執行了别的insert時也會出問題。

2.假如你使用單INSERT語句插入多個行,  LAST_INSERT_ID() 隻傳回插入的第一行産生的值。其原因是這使依靠其它伺服器複制同樣的 INSERT語句變得簡單。