我最近在PHP中一直在做一些web開發工作,這導致我在一般的語言上進行研究。到目前爲止,我不需要使用它來與數據庫進行交互,但我知道它提供了很多方便的功能。儘管我知道基本的SQL,並且已經在數據庫中對數據進行了基本的操作,但我不明白Web/PHP/Javascript/SQL基於PHP/Javascript/SQL的Web開發人員如何能夠管理修改相同數據的用戶同時。PHP和併發
例如,假設您有一個二十一點的網站,用戶在註冊時將用戶劃分爲兩個團隊中的一個。每當用戶贏得比賽時,他們的一部分獎金將被添加到該球隊的總額中。
因此,可以說對於這是否看起來像這樣功能的僞代碼:
...
$total = mysql_query("SELECT score FROM team1");
$total = $total + $mytotal;
mysql_query("UPDATE team1 SET score='".$total."'");
...
如果兩個玩家在玩的同時,很可能是他們都將調用之前的其他選擇人們有機會增加和更新表格,因此一個用戶的更改將立即被覆蓋。
我的問題是,如何避免這種情況?它是在代碼級使用PHP完成的,還是由您使用的任何數據庫提供的功能有助於防止這種情況?
我一直在做一些研究,似乎PHP提供了一個semaphore機制,我也注意到mysql提供了一個LOCK table feature。但是,我不確定這些中的哪一個,如果有的話,在實踐中使用。
感謝大家對我是從學習一些偉大的答案 - 但我更期待的是什麼更復雜的併發問題包括PHP,最好的做法一行SQL不適合。 (對不起,如果我的例子誤導了) – 2009-11-11 04:18:16