什么时候需要在 Web 应用程序中使用事务?

When is using transaction necessary in a web app?

我想知道,如果网络请求处理程序需要执行多个需要成为原子组的更新查询,就像在 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

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

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

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

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

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

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