aszx0413 2018-02-14 21:26:39 2004次浏览 1条回复 0 0 0
$transaction = Customer::getDb()->beginTransaction();
try {
    $customer = new Customer();
    $customer->id = 1;
    $customer->save();
    
    $customer = new Customer();
    $customer->id = 2;
    $customer->save();
    
    $customer = new Customer();
    $customer->id = 3;
    $customer->save();
    
    $transaction->commit();
} catch(\Exception $e) {
    $transaction->rollBack();
    throw $e;
}

如上代码,$transaction->rollBack();这行代码感觉可有可无,去掉之后,如果数据库执行异常了,所有try里面的数据库操作都不会被执行

  • 回复于 2018-02-21 22:31 举报

    感觉你没有完全理解事务的作用,事务的作用是确保事务里的多条语句要么全部成功执行,要么全部不执行,而不能只执行其中的一部分。
    例子里的三条语句,如果不启用rollback,是有可能出现只有前面的一条或两条语句执行成功,而后面的语句执行失败的情况的。
    如果使用了rollback,执行成功的语句就会回滚,这样三条语句都不会执行。

    2 条回复
    回复于 2018-03-01 10:37 回复

    你也不理解事务,最好看看相关文档和动手看看实际情况

    回复于 2018-04-09 19:28 回复

    你们都不理解事务,不用rollback执行失败,表里是没多出来可见数据,但是主键是会被占用的

    , 觉得很赞
您需要登录后才可以回复。登录 | 立即注册