thinkPHP框架樂觀鎖和悲觀鎖例項分析

2022-09-26 03:48:13 字數 945 閱讀 5972

樂觀鎖:

例子對於乙個正在**的火爆商品,同乙個時間,同時有10個人同時發起了10個執行緒來購買,10個執行緒讀取到資料庫的庫存有20件和version為9。

那麼樂觀鎖讀取num數量和version版本兩個字段,在更新的結果時候,我們就要更新條件where version=9這條語句,具體update goods set num=num-1,versiowww.cppcns.comn=version+1 where version=9 and id=1,這樣的話,如果其中一條執行成功後,資料庫中version的值為10了,所以剩下的9個人執行緒都會失敗了。

$result = $this->mysqli->query("select num,version from goods where id=1 li程式設計客棧mit 1");

$row = $result->fetch_assoc();

$num = intval($row['num']);

$version = intval($row['version']);

if($num > 0) and id=1");

$affected_rows = $this->mysqli->affected_rows;

if($affected_rows == 1))");

$affected_rows = $this->mysqli->affected_rows;

if($affected_rows == 1)else

}else

}else

樂觀鎖缺點:

樂觀鎖優點:

悲觀鎖mysql**:

#主要對所在行進行for update

select * from employee where id = 1 for update;

update employee set money = 0 + 1 where id = 1;

參考鏈結:

sql server對併發的處理 樂觀鎖和悲觀鎖

假如兩個執行緒同時修改資料庫同一條記錄,就會導致後一條記錄覆蓋前一條,從而引發一些問題。例如 乙個售票系統有乙個餘票數,客戶端每呼叫一次出票方法,餘票數就減一。情景 總共300張票,假設兩個售票點,恰好在同一時間出票,它們做的操作都是先查詢餘票數,然後減一。一般的sql語句 12 3456 789d...

樂觀鎖和悲觀鎖

1 悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...

樂觀鎖和悲觀鎖

併發衝突 在多使用者的環境下,如果使用者同時修改同乙個文件,就會造成衝突。典型的衝突有兩種 1 丟失更新 乙個使用者的更新記錄覆蓋了另乙個人的更新。如 使用者一 讀 寫 使用者二 讀 寫 那麼使用者一就把使用者二的更新覆蓋了。2 髒讀 乙個使用者更新資料未完成時,另乙個使用者就讀取資訊。使用者一 讀...