一、使用事務處理的場景:
如果一個操作會改變數據庫多處信息,並且這些信息是密切相關的,
爲了確保每一處改動都是成功的,如果其中一處改動不成功,就將其它改動撤銷,以保證數據(事務)的完整性。
比如:你給我轉賬10000塊,需要把你的餘額減10000,我的加10000,如果萬一我的餘額寫入失敗,那麼理應你的餘額不變,
不然這10000就蒸發了~~
二、使用事務處理的前提:
需要數據庫引擎支持事務處理。
比如 MySQL 的 MyISAM 不支持事務處理,需要使用 InnoDB 引擎。
實例:
try {
Db::startTrans();
//將數據1存入表1,並獲取ID:
$re['t1'] = Db::name('table1')
->insertGetId([
'content1' => $content1
]);
//將數據2寫入表2
$re['t2'] = Db::name('table2')
->insert([
'id' => $re['t1'],
'content2' => $content2
]);
//任意一個表寫入失敗都會拋出異常:
if (in_array('0', $re)) {
throw new Exception('意不意外?');
}
Db::commit();
$this->success('完美一擊!');
} catch (Exception $e) {
//如獲取到異常信息,對所有表的刪、改、寫操作,都會回滾至操作前的狀態:
Db::rollback();
$this->error($e);
}
如有任何疑議,歡迎大家留言指正,謝謝~
如此文章對你有幫助,請打開支付寶搜索535149388,領取馬雲的紅包,使用餘額寶消費可抵扣,大家好,纔是真的好。