2011-05-06 75 views
12

返回的錯誤ID的機會從我讀的LAST_INSERT_ID()中檢索要運行的最後一個插入語句的ID。如果最後一個插入語句在您的連接上運行,或者最後一個插入在數據庫上爲所有連接運行?我想我想問的是:在一個繁忙的數據庫驅動的網站上,下面的代碼會返回錯誤的id的機會是什麼,以及是否有一種方法可以防止其他人鎖定數據庫?MySQL和由LAST_INSERT_ID()

INSERT INTO example (string) VALUE ('something'); 
SELECT LAST_INSERT_ID(); 

將PHP的mysql_insert_id()是一個更好的解決方案,或者我應該只是查詢剛插入的數據,搶ID呀?

回答

11

,即最後插入語句的連接上運行或...

您的連接上的last_insert。

將PHP中的mysql_insert_id()是一個更好的解決方案

不,這是一樣的。

或者我應該只是查詢剛剛插入的數據,並以這種方式獲取ID?

這方式方式較慢

鏈接:從該鏈接http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

引用:

已生成被保持在基於每個連接的基礎上的服務器的ID。這意味着該函數返回給定客戶端的值是爲該客戶端影響AUTO_INCREMENT列的最新語句生成的第一個AUTO_INCREMENT值。即使它們生成自己的AUTO_INCREMENT值,該值也不會受到其他客戶端的影響。此行爲可確保每個客戶端都可以檢索自己的ID,而不必關心其他客戶端的活動,而無需鎖定或事務。

+0

感謝您的及時和翔實的答案。 – 2011-05-06 23:04:02