tp5數據庫鎖的使用


tp5數據庫鎖的使用

Lock方法是用於數據庫的鎖機制,如果在查詢或者執行操作的時候使用:

Db::name('user')->where('id',1)->lock(true)->find();

  
  
 
 
         

就會自動在生成的SQL語句最后加上 FOR UPDATE或者FOR UPDATE NOWAIT(Oracle數據庫)。

lock方法支持傳入字符串用於一些特殊的鎖定要求,例如:

Db::name('user')->where('id',1)->lock('lock in share mode')->find();

  
  
 
 
         

示例 

支付回調時鎖定當前訂單

lock(true)為悲觀鎖,加鎖后,其他用戶不能讀也不能寫

lock('lock in share mode') 其他用戶樂觀鎖,可讀不可寫


   
   
  
  
          
  1. public function payNotify($message)
  2. {
  3. $this->startTrans();
  4. try {
  5. $order = $this
  6. ->where( 'orderno', $message[ 'out_trade_no'])
  7. ->lock( true)
  8. ->find();
  9. if (!$order || $order[ 'status'] == 2) { // 如果訂單不存在 或者 訂單已經支付過了
  10. $this->rollback();
  11. return true;
  12. }
  13. $order->status = 2;
  14. $order->paytime = time();
  15. $order->save();
  16. $this->commit();
  17. } catch(\ Exception $e){
  18. $this->rollback();
  19. }
  20. return true;
  21. }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM