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();
用于高并发请快对数据的处理和保证
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步