加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:09:46 所属栏目:MsSql教程 来源:网络整理
导读:使用SQL Server的事务隔离级别,可以避免某些不必要的并发问题,如脏读等. 我现在感兴趣的是丢失的更新 – 事实上,两个事务可以覆盖彼此的更新,而没有任何人注意到.我看到并听到关于最低限度的隔离级别的冲突声明,我必须选择避免这种情况. Kalen Delaney在她的
使用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锁定(这将导致此情况下的死锁)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读