在平时工作中 很多时候会碰到 要求数据一致性的场景
这个时候必不可少的 要应用到事务
背景:
朋友用laravel 在开发后台时发现开启事务后并没有生效
在未经过commit() 数据依然存储到了数据库中
查看文档,beginTransaction 不会自动提交
最后他自己发现是跨库导致 在此做个记录
1、laravel事务操作有两种可以选择
1.1、自动 transaction 不需要担心回滚or提交
示例:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
1.2、beginTransaction 手动提交or回滚
DB::beginTransaction();开启事务
DB::rollback(); 回滚
DB::commit(); 提交
2、跨库事务操作
2.1、当你在框架中使用DB::beginTransaction(); 时,开启的是默认配置的数据库,如果想操作另外一个库 需要进行指定
示例:
DB::beginTransaction(); 开启默认数据库事务
DB::connection('test')->beginTransaction(); 开启指定数据库事务
//数据处理流程
if(true)
{
//提交
DB::commit();
DB::connection('test')->commit();
}else{
//回滚
DB::rollback();
DB::connection('test')->rollback();
}