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

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

posted on 2019-09-12 16:16  明蓝  阅读(840)  评论(0编辑  收藏  举报