2012-11-15 57 views
2

我有一個關於併發控制和什麼時候擔心的問題。我創建了一個PHP/MySQL網站(InnoDB)。我知道如何避免事務問題,但接下來是併發控制。何時擔心併發控制PHP mysql

我的網站是一個電子商務,它持有用戶插入商品,以此爲例。當用戶將新項目插入到站點時,數據庫創建一個productId作爲主鍵(由數據庫自動遞增),並存儲有關通過表單提交的產品的其他數據。我正在使用準備好的語句。

我是否必須擔心兩個或多個用戶是否在同一時間完成此操作?是否有機會同時提交兩個或更多項目會混淆不同行的數據?

爲了能夠插入產品,用戶必須使用會話進行登錄才能解決問題。

在此先感謝,馬庫斯。

+3

沒有。無論有多少個並行插入正在執行,auto_increment id都保證是唯一的。在回滾的交易中創建的ID也不會被重複使用。 –

+0

啊哈,很高興知道。謝謝你的答案。 – Markus

回答

3

除非它們寫入完全相同的行,否則我不明白爲什麼會有任何併發​​問題。即使他們正在寫入同一行,InnoDB也會鎖定行級別,這意味着一行將被鎖定,直到用戶完成寫入操作爲止,並讓後續用戶「等待它」直到鎖定已經發布。關於「衝突的INSERT查詢」的可能性:如果您要將新數據插入到使用自動遞增主鍵的表中,那麼您每次都可以獲得唯一的ID,這意味着併發應該永遠不會成爲INSERT的一個問題。

+0

我明白了,謝謝你的回答。 – Markus

2

你可以做更快的表鎖定特別有用的更新