2011-09-25 92 views
4

我正在使用Yii PHP框架,它有一個函數PDO :: lastInsertId,顯然這只是PDO :: lastInsertId的一個實現。如果我的應用程序可能有數以千計的併發用戶進行非常快速的插入,那麼這個函數是否可靠可以獲得我剛剛插入的數據的自動遞增行ID?PDO :: lastInsertId對於非常快速的插入是可靠的嗎?

我需要獲得插入本身後插入的行的ID,但要確保插入率非常高,它不會導致不一致的結果。

謝謝!

回答

12

是的,當然,不用擔心,但是你必須確保在插入查詢之後詢問lastInsertId。在此期間,不應該在該連接上執行其他查詢,每個PHP進程都必須具有單獨的連接。

此外,如果您認爲表每秒會有數百或數千個插入,請考慮不要使用索引或使用最小數量的索引。如果MySQL支持MyISAM表。

+0

在插入查詢後立即調用lastInsertId()調用,我的擔心是關於其他併發用戶。 PHP進程默認有單獨的連接嗎? (我猜在yii中最具體?)。謝謝你回到我身旁。 – csjohn

+4

>默認情況下,PHP進程是否有單獨的連接?是。 – stivlo

+0

+1非常好的answear。也許暫時刪除索引可能會提供更多的插入速度(我猜)。 – Melsi