【问题标题】:When is using transaction necessary in a web app?什么时候需要在 Web 应用程序中使用事务?
【发布时间】:2015-09-25 21:59:52
【问题描述】:

我想知道,如果一个网络请求处理程序需要执行多个更新查询,这些查询需要是一个原子组,就像在 Django 应用程序中这样:

modelA.fieldX = True
modelA.save()   # produce a update query on modelA table
modelB.fieldY = modelB.fieldY + 1
modelB.save()   # produce a update query on modelB table

并且查询之间没有采取逻辑分支或抛出异常,我还需要将查询包装在事务中吗?

将它们包装在事务中的缺点是什么?它如何影响相关表上其他查询的性能?

编辑: 目前,为了安全起见,我只将交易用于与金钱相关的查询。

【问题讨论】:

  • 不使用事务时是否会出错?
  • 问自己两个问题:1)如果更新表 A 和 B 之间发生异常(B 不会更新),您的数据是否一致;2)如果另一个客户端执行,您的数据是否一致您的更新 A 和 B 之间的相同记录的类似更新批次?如果不是(1 或 2),那么您需要交易。

标签: sql database web transactions


【解决方案1】:

通常,事务是数据一致性所必需的。例如,当您将资金从账户 A 转移到账户 B 时,您应该在交易中更新账户 A 和 B 中的金额,以避免出现账户 A 的金额减少但账户 B 的金额不增加的情况异常或其他原因。

长事务对关系数据库不利,因为它增加了数据库资源的锁定并增加了开销成本

我建议使用尽可能短的事务来确保数据的一致性。

【讨论】:

    猜你喜欢
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2011-03-17
    • 2019-09-08
    • 2016-11-01
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多