# 事务处理 [TOC] ####使用闭包处理事务 ``` Db::transaction(function(){ if(!Db::execute('DELETE FROM news WHERE id=?',[1])){ throw new \Exception(); } if(!Db::execute('DELETE FROM news WHERE id=?',[5])){ throw new \Exception(); } }); ``` > 注意: 在 transaction 闭包若抛出任何异常会导致事务自动回滚。 #### 开启事务 有时候你可能需要自己开启一个事务 ``` Db::beginTransaction() ``` #### 事务回滚 通过 rollback 的方法回滚事务 ``` DB::rollback(); ``` #### 提交事务 通过 commit 的方法提交事务 ``` DB::commit(); ``` #### 排他锁 排他锁(FOR UPDATE )即,禁止其他事务执行任务操作(包括查询)。 ``` Db::transaction(function(){ //锁定goods表,多个用户执行本代码时,需要前一个用户执行完才可以操作goods表,哪怕是读取goods表中的数据 Db::table('goods')->lock()->get(); }); ```