提问者:小点点

我什么时候应该使用MySQL事务?


我读了一些关于何时应该使用事务的文章。 我读到:

我什么时候应该使用事务处理? 基本上,任何时候,如果发生错误或其他原因,您的工作单元要么对外部更改敏感,要么需要回滚每个更改的能力。

但有人能给我解释得更好吗?

  • 在执行两个或多个删除/更新/插入查询时是否应启动事务?
  • 当我只有一个删除/更新/插入查询时,是否也应该启动事务?
  • 我是应该在一个页面上开始一个事务10次,还是更好地在整个页面上只开始一次,还是建议每个页面的最大值(例如5次)?

谢谢你的帮助!


共2个答案

匿名用户

当您有一组相互依赖的查询时,就会使用事务处理。

例如,银行:

    银行客户“John”向“Alice”的账户转账100美元
  • 对于本例,有2个查询(我没有显示日志记录或事务历史。。。等等)。 你需要从约翰的余额中扣除100美元,然后加到爱丽丝的余额中。
  • 启动事务
  • 从约翰身上扣除
    • 更新帐户集balance=balance-100,其中account='john'
    • 更新帐户集balance=balance+100,其中account='alice'

    事务在提交之前不会被保存。 因此,如果两个查询中都有错误,则可以调用rollback并撤消自事务启动以来运行的任何查询。 如果由于某种原因,向Alice添加$100的查询失败,您可以回滚,不从John扣除$100。 这是一种确保您可以在需要时自动撤消查询的方法。

    >

  • 在执行两个或多个删除/更新/插入查询时是否应启动事务?

    取决于查询正在做什么。

    当我只有一个delete/update/insert查询时,是否也应该启动事务?

    除非您需要一种回滚(撤消)查询的方法,例如在调用commit(保存)之前执行更新并验证它,否则不是必要的。

    我应该在一个页面上开始一个交易10次,或者更好的是在整个页面上只做一次,或者你建议每一个页面都做一个最大值(例如5次)?

    你需要多少就开始多少。 我会怀疑你有多个交易每一页,因为你将最有可能做一件事每一页加载(即转移金钱)。

匿名用户

每当您需要执行一组相关查询时,就会使用事务,就好像它只是一个查询一样。

例如:

在购物车中,有人为产品做广告,你会更新商店库存(减少存在),并更新客户购物车(增加购物车上的产品)。 在这种情况下,会发生2个操作,这就是为什么您要创建一个事务,如果其中一个查询失败(商店上有不合格的产品),第二个查询不应该发生(将产品添加到客户的购物车)。 在本例中,两个查询符合一个工作单元,这意味着数据库应该同时处理或不处理这两个查询。

现在,考虑到您的观点,我看不出使用事务来执行无关查询的可靠理由(除非有特殊需要)。 取决于您正在使用的数据库引擎,以及您正在开发的系统,不必要的事务将产生性能瓶颈。

另一方面,在某些应用程序中,您可能需要执行多个事务,但这是您应该根据具体情况来决定的,因为没有通用规则。

关于您所关心的限制每页事务的数量,或者每页只创建一个事务的问题,我只能说这取决于您想要完成的内容。 您可能需要执行10个相关的查询,这些查询应该在失败时一起回滚,然后您需要一个事务。 如果您需要运行许多不相关的查询而不需要回滚,则意味着您甚至不需要事务。

你也可以查看维基百科关于这个主题的条目:

http://en.wikipedia.org/wiki/database_transaction