我在用戶表上有一個字段,用於保存用戶的帳戶餘額。用戶可以使用我的服務執行大量操作,這將導致其餘額的快速更改。使用mysql更新帳戶餘額
我想使用mysql的可序列化的隔離級別,以確保多個用戶操作不會錯誤地更新值。 (行動A和行動B同時要從餘額中扣除1美元。)但是,我收到了很多死鎖錯誤。
如何正確執行此操作而不會導致所有這些死鎖,並仍然保持餘額欄位處於最新狀態?
簡單模式:用戶有一個id和一個餘額。
即時通訊使用的學說,所以我做類似如下:
$con->beginTransaction();
$tx = $con->transaction;
$tx->setIsolation('SERIALIZABLE');
$user = UserTable::getInstance()->find($userId);
$user->setBalance($user->getBalance() + $change);
$user->save();
$con->commit();
如果您提供了架構以及選擇,更新和訪問模式,這些問題將更容易解決問題。 – atxdba 2012-01-11 23:37:58
更新了問題。 – 2012-01-11 23:52:52