首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果查询失败,是否需要编写回滚?

问如果查询失败,是否需要编写回滚?
EN

Stack Overflow用户
提问于 2010-05-02 02:40:31
回答 5查看 4K关注 0票数 9

我写

mysql_query("SET AUTOCOMMIT=0");

mysql_query("START TRANSACTION");

在我写所有的查询之前。然后检查它们是否都是真的,然后写道:

mysql_query("COMMIT");

但如果其中一个查询失败,我就会传递COMMIT查询。那么,如果其中一个查询失败,我真的需要回滚功能吗?因为没有回滚,它也可以工作。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-02 02:47:39

我认为你是在问是否有必要执行回滚,因为如果没有它,提交仍然不会被应用。这在技术上是正确的,但这只是因为事务仍然是打开的,因为您还没有结束它。任何隐式提交事务的操作(例如,启动一个新事务)都将表现为您运行了COMMIT,这与您想要的相反

票数 13
EN

Stack Overflow用户

发布于 2010-05-02 02:45:24

使用事务的原因是将多个更改组合在一起,以便它们都自动成功,否则,如果它们不能,就不做任何更改。换句话说,如果任何更改失败,事务将使数据库处于逻辑上不一致的状态。

示例:在一次更新中借记一个帐户,在另一次更新中记入另一个帐户。这代表着一笔转账。如果借记成功但贷记失败,你应该回滚整个交易,否则看起来钱就消失得无影无踪了。

因此,预期的用途是在其中一个更改失败的情况下回滚事务。

您似乎是在说,在您的应用程序中,如果其中一个更改失败了,也没什么问题。这让我认为您将更改分组到事务中是不恰当的。

决定哪组更改必须一起成功,并将这些更改放入一个事务中。任何不符合此组的更改都应在单独的事务中进行。

票数 7
EN

Stack Overflow用户

发布于 2010-05-02 02:47:58

您应该显式地使用ROLLBACK来明确您对以后必须阅读您的代码的任何人所做的操作,实际上可能是您:)

此外,如果您添加了在提交/回滚之后执行的代码,最好显式触发它,以获得更可预测的数据状态。如果您依赖于自动回滚,则代码可能期望数据库处于未修改状态,而实际上它仍处于未提交事务中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2751129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档