OBJECT
GRANT
IX
UserTable
NULL
NULL
52
KEY
GRANT
X
(ff4928fe375a)
UserTable
4
idx_UserTable_LastModifyTime
52
KEY
GRANT
X
(0ee48b5e6942)
UserTable
1
PK__Test1__3213E83F133024F3
52
KEY
GRANT
X
(150ba0b85c41)
UserTable
4
idx_UserTable_LastModifyTime
从上表中可以看出在更新数据的时候,由于涉及到多行的非聚集索引上面的数据,因此对于该索引涉及到的数据行都增加了X锁,涉及到的数据页也比之前更多了 。类型为X锁,同时索引名称为PK__Test1__3213E83F133024F3的有两行,因为本次事务匹配到了两行数据;类型为X锁,同时索引名称为idx_UserTable_LastModifyTime的一共有四行 。为什么是四行呢?因为有两个旧的数据需要删除,同时新增了两个新的数据,所以是四行 。其他的非聚集索引的数据并没有修改,所以本次不需要申请X锁 。
总结数据库中的各种事务隔离级别都是通过对于不同锁的综合运用实现的 。对于锁的认识可以从两个角度进行:锁模式和锁对象 。哪怕是一个简单的select语句都会有默认的某种锁以保护数据的正确性 。需要注意不同的数据组合情况、不同的事务隔离级别下SQL语句的执行过程可能是不一样的,因此其使用的锁也会千变万化,本文所列举的只是一些很简单的情况,但是规则类似,分析路径也是基本一致的,有兴趣的可以自己尝试下日常工作中语句的执行过程中使用的锁,这对于理解数据库工作原理,有针对性的对于SQL语句调优都有一定帮助(注意不要在生产环境执行这类分析) 。
参考文档
- SQL Server, Locks object
- 事务锁定和行版本控制指南
- Microsoft SQL Server企业级平台管理实践
推荐阅读
- 用Stream实现mysql的groupBy, sum Case when 语法
- 经典SQL语句大全
- 国内地下铲运机市场分析 地下铲运机
- 孩子生活自理能力差的原因,孩子生活自理能力差的原因分析
- 招聘|高薪直聘:挪威情报局公开招聘懂中文的网络分析师
- 控制不住笑的原因分析
- 孩子动手打人家长怎么教育?父母打骂孩子犯什么法
- 小学五年级语文单元测试家长评语分析?这样给小学五年级学生作文写评语_1
- 属鼠蓝和属鼠灰人物分析?属鼠蓝和属鼠灰的故事
- 在客户关系管理里,对于客户价值的分析与评价?客户服务与管理期末试题