sql-server – 最小事务隔离级别,以避免“丢失更新”

前端之家收集整理的这篇文章主要介绍了sql-server – 最小事务隔离级别,以避免“丢失更新”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用sql Server的事务隔离级别,可以避免某些不必要的并发问题,如脏读等.

我现在感兴趣的是丢失的更新 – 事实上,两个事务可以覆盖彼此的更新,而没有任何人注意到.我看到并听到关于最低限度的隔离级别的冲突声明,我必须选择避免这种情况.

Kalen Delaney在她的“sql Server内部”一书中说(第10章 – 事务和并发 – 第592页):

在读取未提交的隔离中,除了丢失更新之外,上述所有行为都是可能的.

另一方面,独立的sql Server培训师给我们一个类告诉我们,我们至少需要“可重复读取”来避免丢失更新.

那么谁是对的?为什么?

解决方法

本书中的例子是文员A和文员B接收小部件的发货.

他们都检查当前库存,见25库存.文员A有50个小部件和更新到75,文员B有20个小部件,所以更新45覆盖以前的更新.

我认为她的意思是这个现象可以避免在所有的隔离级别的文员A做

UPDATE Widgets
SET StockLevel = StockLevel + 50
WHERE ...

和文员B做

UPDATE Widgets
SET StockLevel = StockLevel + 20
WHERE ...

当然,如果SELECT和UPDATE作为单独的操作完成,则需要重复的读取才能避免这种情况,因此在该事务的持续时间内保持该行的S锁定(这将导致此情况下的死锁)

猜你在找的MsSQL相关文章