2012-05-12 46 views
1

我很好奇這是否是一種可能性。我有一個存儲過程插入,然後檢索最後一個插入ID。如果兩個用戶同時使用這個程序會怎麼樣?MySQL存儲過程和最後插入的行

User 1 
      User 2 
Insert 1 
      Insert 2 
GetsLastid 2 
      GetsLastid 2 

莫非隔行插入查詢的順序存儲過程的2個呼叫?或者一個人會帶頭?

謝謝!

回答

3

這不是問題。從fine manual

生成的ID在每個連接的基礎上維護在服務器中。這意味着該函數返回給定客戶端的值是該客戶端影響AUTO_INCREMENT的最新語句生成的第一個AUTO_INCREMENT值。此值不會受其他客戶端的影響,即使它們生成自己的AUTO_INCREMENT值。

所以last_insert_id()值始終爲每個會話(AKA 連接),你必須在場上兩會上,無法與對方的last_insert_id()值干擾。

也就是說,儘可能在INSERT之後抓住last_insert_id()值並將其存儲在變量中是一個好主意。如果你做了一些其他的操作,例如在後面插入INSERT —,你可以打電話給另一個程序,該程序在路上添加了兩個月,並且日誌記錄執行了INSERT —,那麼將會丟失所需的last_insert_id()值。

+0

謝謝你指着那個人! – Theveloper