我有这个查询
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
UPDATE c
SET c.Score = 2147483647
FROM dbo.Comments AS c
WHERE c.Id BETWEEN 1 AND 5000;
哪些有这些统计数据
+--------------+---------------+---------------+-------------+
| request_mode | locked_object | resource_type | total_locks |
+--------------+---------------+---------------+-------------+
| RangeX-X | Comments | KEY | 2429 |
| IX | Comments | OBJECT | 1 |
| IX | Comments | PAGE | 97 |
+--------------+---------------+---------------+-------------+
我想知道 IX,它是一个 Intent Lock。这是什么意思,为什么它自己在桌子上存在一个?据我了解,它不是真正的锁,而是 SQL Server 使用(或由事务设置?)来指示可能发生锁的更多东西。
以上是对的吗?
你是对的,这是给引擎的一个信号,你希望锁定一个对象。为了过度简化,假设您想从图书馆获得一本书,如果有人借阅了这本书,您将无法获得它,因此您将您的名字放在打算借阅该书的人的名单上。当其他人都完成了它,轮到你时,你就可以查看这本书了。
如果您还没有这样做,我强烈建议您阅读MSDN 上的Transaction Locking and Row Versioning Guide,它提供了有关它如何工作的一些详细信息。
以下是该页面的片段: