在可序列化隔离级别发生了丢失的更新?

时间:2018-07-31 18:24:42

标签: sql sql-server tsql transactions isolation-level

最近,我一直在学习有关sql server的隔离级别的信息。在观看其中一部教程时,我注意到一些我不理解的奇怪现象。 有人告诉我,在可序列化的隔离级别中没有丢失更新,但是在提交第一次事务后在2:30丢失了更新吗?:https://www.youtube.com/watch?v=9NVu17LjPSA&list=PL08903FB7ACA1C2FB&index=75

请解释一下那一刻发生的事情

1 个答案:

答案 0 :(得分:1)

有问题的视频解释说,执行更新(事务1)时,不会提交更新。但是,由于事务隔离级别是可序列化的,因此在释放锁之前,该同一记录的读入事务2不能读取该值。因此,事务2当前被事务1阻塞。在提交事务1时释放了锁,然后事务2获得了可序列化隔离所需的锁。

From the docs

  • 语句无法读取已被其他事务修改但尚未提交的数据。

  • 在当前事务完成之前,没有其他事务可以修改当前事务读取的数据。

  • 其他事务无法插入具有以下内容的键值的新行: 属于当前的任何语句读取的键的范围 交易,直到当前交易完成。

更有趣的是,如果您认为可序列化隔离意味着仅在前一个事务完成之后才执行事务。 Paul White blogs on this in great detail.