我想知道,如果Web请求处理程序需要执行需要成为原子组的多个更新查询,就像在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
在查询之间没有采用逻辑分支或抛出异常,我还需要在事务中包装查询吗?
在交易中包装它们的缺点是什么?它如何影响相关表上其他查询的性能?
编辑: 目前,我只使用交易进行与金钱相关的查询,只是为了安全起见。
答案 0 :(得分:1)
通常,事务是数据一致性所必需的。例如,当您将资金从帐户A转帐到帐户B时,您应该更新交易中帐户A和B中的金额,以避免在减少帐户A金额但帐户B的金额未因此增加而增加的情况例外或其他原因。
长事务对关系数据库不利,因为它增加了数据库资源的锁定并增加了它的开销成本
我建议尽可能使用短交易来确保数据的一致性。