使用事務(wù)首先要數(shù)據(jù)庫(kù)支持事務(wù);
如下MySQL數(shù)據(jù)庫(kù)user表開(kāi)啟事務(wù)支持,即設(shè)計(jì)表->引擎設(shè)置為InnoDB->保存文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-641033.html
事務(wù)處理
1. 數(shù)據(jù)庫(kù)的表引擎需要是 InnoDB 才可以使用,如果不是調(diào)整即可;
2. 事務(wù)處理,需要執(zhí)行多個(gè) SQL 查詢(xún),數(shù)據(jù)是關(guān)聯(lián)恒定的;
3. 如果成功一條查詢(xún),改變了數(shù)據(jù),而后一條失敗,則前面的數(shù)據(jù)回滾;
4. 比如:蠟筆小新給路飛 3 快錢(qián),自己-3,對(duì)方+3,這時(shí)需要事務(wù)處理;
5. 系統(tǒng)提供了兩種事務(wù)處理的方式,第一種是自動(dòng)處理,出錯(cuò)自動(dòng)回滾;
Db::transaction(function () {
Db::name('user')->where('id', 19)->save(['price'=>Db::raw('price - 3')]);
Db::name('user1')->where('id', 20)->save(['price'=>Db::raw('price + 3')]);
});
=========事務(wù)回調(diào)函數(shù)內(nèi)部給外部變量賦值=======方便操作后根據(jù)結(jié)果做判斷
public function trans(){
$res1=0;
$res2=0;
$res=[];
Db::transaction(function ()use(&$res,&$res1,&$res2){
$res1=Db::table('user')->where(['name'=>'qc'])->setDec('age',2);
$res2=Db::table('user')->where(['name'=>'qzy'])->setInc('age',2);
$res=Db::table('user')->where(['name'=>'qc'])->find();
});
if($res1&$res2){
dump($res1);
dump($res2);
dump($res);
}
return 123;
}
6. 手動(dòng)處理,基本和原生處理類(lèi)似,可以自行輸出錯(cuò)誤信息;
//啟動(dòng)事務(wù)
Db::startTrans();
try {
Db::name('user')->where('id', 19)->save(['price'=>Db::raw('price - 3')]);
Db::name('user1')->where('id', 20)->save(['price'=>Db::raw('price + 3')]);
//提交事務(wù)
Db::commit();
} catch (\Exception $e) {
echo '執(zhí)行 SQL 失敗!';
//回滾
Db::rollback();
}
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-641033.html
到了這里,關(guān)于tp5中的事務(wù)處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!