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