如果提交失败,是否需要回滚?

时间:2016-06-30 21:05:32

标签: php mysql commit rollback

这似乎是一个简单的问题,但我找不到任何特定于MySQL的确定答案。看看这个:

$mysqli->autocommit(false); //Start the transaction
$success = true;    

/* do a bunch of inserts here, which will be rolled back and
   set $success to false if they fail */

if ($success) {
    if ($mysqli->commit()) {
        /* display success message, possibly redirect to another page */
    }
    else {
        /* display error message */
        $mysqli->rollback(); //<----------- Do I need this?
    }
}

$mysqli->autocommit(true); //Turns autocommit back on (will be turned off again if needed)

//Keep running regardless, possibly executing more inserts

问题是,我看到的大多数示例只是在提交失败时结束脚本,或者通过让它完成或显式调用exit(),显然自动回滚事务(?),但是如果我怎么办?需要继续运行并可能在以后执行更多数据库更改操作?如果此提交失败并且我没有在那里进行回滚,则会重新启用自动提交(根据thisautocommit 上的PHP手册条目的评论提交待决操作)或甚至稍后显式调用另一个$mysqli->commit(),尝试再次提交先前的插入,因为它之前失败并且它们没有回滚?

我希望我已经足够清楚了,我可以得到一个明确的答案,这一直困扰着我。

编辑:好的,也许我在那一行评论中说错了我的问题。这不是我是否需要回滚的问题,正如我们所指出的那样,这将取决于我的用例,但实际上是什么影响是否在该行中进行了回滚。也许一个更简单的问题是:失败的commit调用是否会丢弃挂起的操作,还是只是让它们处于挂起状态,等待回滚或其他提交?

0 个答案:

没有答案