一、使用场景:
如果一个操作会改变数据库多处信息,并且这些信息是密切相关的,
为了确保每一处改动都是成功的,如果其中一处改动不成功,就将其它改动撤销,以保证数据(事务)的完整性。
比如:你给我转账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();
return $this->success('完美一击!');
} catch (\Exception $e) {
//如获取到异常信息,对所有表的删、改、写操作,都会回滚至操作前的状态:
Db::rollback();
return $this->error($e->getMessage());
}
如有任何疑议,欢迎大家留言探讨、指正,谢谢~
如此文章对你有帮助,请打开支付宝搜索535149388,领取马云的红包,使用余额宝消费可抵扣,大家好,才是真的好。
更多精彩内容请扫码关注:
