官方手册里的事务操作
1.自动控制事务处理(匿名函数方式)
Db::transaction(function(){
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
});
2.手动控制事务
// 启动事务
Db::startTrans();
try{
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
}
除了官方推荐方式,我们也可以另外使用模型来控制事务
$test1Model=new Test1Model;
$test2Model=new Test2Model;
$test1Model->startTrans();
try{
$test1Model->where('id','eq',1)->delete();
$test2Model->where('id','eq',1)->delete();
$test1Model->commit();
}catch(\Exception $e){
$test1Model->rollback();
}
需要注意的几个方面是
- 使用事务处理的话,需要数据库引擎支持事务处理。 比如 MySQL 的MyISAM 不支持事务处理,需要使用InnoDB 引擎
- 注意在事务操作的时候,确保你的数据库连接是相同的
- 业务上的出错和数据库操作的出错是不同的,你可能需要自己捕获业务上的出错信息