• thinkphp和laravel 事务/锁的使用


    thinkphp

    自动控制事务处理

    Db::transaction(function(){
        Db::table('think_user')->find(1);
        Db::table('think_user')->delete(1);
    });

    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();

    也可以手动控制事务,例如:

    // 启动事务
    Db::startTrans();
    try{
        Db::table('think_user')->find(1);
        Db::table('think_user')->delete(1);
        // 提交事务
        Db::commit();    
    } catch (Exception $e) {
        // 回滚事务
        Db::rollback();
    }

    laravel

    DB::beginTransaction();
    try{
        DB::commit(); //事务提交catch (Exception $e){
        DB::rollback();//事务回滚
    
    }

    sharedLock,lockForUpdate

    • sharedLock 对应的是 LOCK IN SHARE MODE
    • lockForUpdate 对应的是 FOR UPDATE
    User::where('id', 33)->lockForUpdate()->get();

    用于高并发请快对数据的处理和保证

  • 相关阅读:
    FileWatcher
    virtual table(有180个评论)
    this 指针
    docker -ce(社区免费版)
    vue-cli
    CAP理论、BASE理论
    B+树和LSM存储引擎代表树和B-树
    CPU高速缓存
    Python&基础环境搭建
    二叉树
  • 原文地址:https://www.cnblogs.com/fengqyuan/p/11512497.html
Copyright © 2020-2023  润新知