为什么意图锁不与sql中的低级锁冲突?

时间:2018-02-01 13:26:06

标签: sql sql-server database tsql concurrency

我正在阅读“SQL Server基础知识”并且不明白为什么如果我在表上有意图锁定,我仍然可以在其子部分上拥有独占锁或共享锁。谁能解释一下?

我的意思是我们锁定整个表并且不希望它被修改,但是这里有一个独占锁并修改了这个表的行。我显然不明白,所以,请向我解释这件事是如何运作的,谢谢!

以下是作者在其书中提供的表格。

enter image description here

1 个答案:

答案 0 :(得分:0)

当我们修改表中的行时,我们不能通过其他事务修改相同的行,非意图锁可以保证这一行。

但是,表上的意图锁与表的某些部分的独占锁兼容,因为意图锁的目的是保护修改所有数据的修改

一个示例是当您读取表A的行时,因此您对这些行具有共享锁并且该表上具有意图共享锁,意图共享锁可以防止另一个事务可以获得对该表的独占锁的情况表A并尝试删除它(这是所有数据的修改)。由于行上的共享锁首先开始读取行的数据,因此允许该操作首先完成是合乎逻辑的。