sql-server – 密钥锁实际锁定什么资源?

栏目: 数据库 · 发布时间: 6年前

内容简介:键锁影响与给定谓词(种类)匹配的所有行 – 在示例中,所有具有surname =’Jones’的行都将受到影响.使用单词“range”,因为根据谓词可能会影响行范围,例如,如果谓词为age> 18那么年龄大于18的所有行都会受到影响.同样重要的是要明白,键锁并不是简单地单独锁定索引中的每个匹配行 – 您的示例键锁不仅会影响索引中所有现有行的姓氏“Jones”,还会影响任何修改现有行的尝试或者插入一个名为“琼斯”的新行.

我知道钥匙锁在索引中锁定一个键.但是,“关键”究竟是什么意思呢?

例如,如果我在一个姓氏列上有一个非聚集索引,并尝试更新surname =“Jones”,那么我会有效地锁定姓氏是“Jones”的表中的每一行吗?或者将索引锁定在更高级别,阻止访问除“琼斯”以外的姓氏的行?

我问的原因是在线书籍关于锁定粒度和层次结构的这个注释:

KEY: A row lock within an index used to protect key ranges in serializable transactions.

这表明一系列的钥匙将被锁定,而不仅仅是一个.

键锁影响与给定谓词(种类)匹配的所有行 – 在示例中,所有具有surname =’Jones’的行都将受到影响.

使用单词“range”,因为根据谓词可能会影响行范围,例如,如果谓词为age> 18那么年龄大于18的所有行都会受到影响.

同样重要的是要明白,键锁并不是简单地单独锁定索引中的每个匹配行 – 您的示例键锁不仅会影响索引中所有现有行的姓氏“Jones”,还会影响任何修改现有行的尝试或者插入一个名为“琼斯”的新行.

它可能有助于以稍微不同的方式思考锁 – 只有当SQL Server尝试获得可能不兼容的另一个锁(即同时具有两个锁是不合法的)时,锁才有效果.例如,如果您在具有年龄>的行上拥有专属密钥锁定18,并尝试插入或修改age = 42的行,然后SQL Server将首先尝试获取相关锁 – 看到存在具有年龄>的行的现有密钥锁. 18 SQL Server确定锁是不兼容的,并采取相应的行动.

代码日志版权声明:

翻译自:http://stackoverflow.com/questions/6012911/what-resource-does-a-key-lock-actually-lock


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Netty实战

Netty实战

诺曼·毛瑞尔(Norman Maurer)、马文·艾伦·沃尔夫泰尔(Marvin Allen Wolfthal) / 何品 / 人民邮电出版社 / 2017-5-1 / 69.00

编辑推荐 - Netty之父”Trustin Lee作序推荐 - 阿里巴巴中间件高级技术专家为本书中文版作序推荐 - 系统而详细地介绍了Netty的各个方面并附带了即用型的优质示例 - 附带行业一线公司的案例研究 - 极实用的Netty技术书 无论是构建高性能的Web、游戏服务器、推送系统、RPC框架、消息中间件还是分布式大数据处理引擎,都离不开Nett......一起来看看 《Netty实战》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具