我的问题是交易如何运作?
假设我正在更新事务中的记录,而另一个事务也将更新该记录。
1)我的交易读取该记录的值并尝试更新它 2)平均值,而第二个记录也读取与第一个记录相同的值并进行更新 3)在第二个事务提交之前,由于第一个事务已提交,它已经更改了该记录的值。
那么在这种情况下数据如何一致?
答案 0 :(得分:0)
假设我正在更新事务中的记录,而另一个事务也将更新该记录。
理论上,每个事务应该独立执行(为了实现ACID属性的I),但实际上这没有多大意义。这完全取决于性能问题。高并发应用程序的数据库将无法以这种方式正确执行。
这个想法是在隔离和性能之间实现平衡。当隔离级别降低时(例如,通常是默认隔离级别的COMMITTED READ),会出现一些问题,如问题中描述的问题(称为“丢失更新”)。
那么在这种情况下数据如何一致?
有几种并发控制机制可以帮助解决“丢失更新问题”,例如: optimistic locking and pesismitic locking。哪一个更好取决于你的申请要求。