zoukankan      html  css  js  c++  java
  • 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. }
  • 相关阅读:
    写代码随想
    学生管理系统
    自定义栈
    位运算符加密
    自定义Vector
    二叉树排序
    双向循环链表
    双向链表
    加载properties文件
    通讯录
  • 原文地址:https://www.cnblogs.com/ianlab/p/14656686.html
Copyright © 2011-2022 走看看