首页 > Web开发 > 详细

thinkphp和laravel 事务/锁的使用

时间:2019-09-12 17:38:02      阅读:105      评论:0      收藏:0      [点我收藏+]

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

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

thinkphp和laravel 事务/锁的使用

原文:https://www.cnblogs.com/fengqyuan/p/11512497.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!