• 键范围锁定

    SQL Server 2008 R2
    此主题尚未评级 - 评价此主题

    在使用可序列化事务隔离级别时,对于 Transact-SQL 语句读取的记录集,键范围锁可以隐式保护该记录集中包含的行范围。可序列化隔离级别要求每当在事务期间执行任一查询时,该查询都必须获取相同的行集。键范围锁可防止其他事务插入其键值位于可序列化事务读取的键值范围内的新行,从而确保满足此要求。

    键范围锁可防止幻读。通过保护行之间的键范围,它还可以防止对事务访问的记录集进行幻插入。

    键范围锁放置在索引上,指定开始键值和结束键值。此锁将阻止任何要插入、更新或删除任何带有该范围内的键值的行的尝试,因为这些操作会首先获取索引上的锁。例如,可序列化事务可能发出了一个 SELECT 语句,以读取其键值介于 'AAA''CZZ' 之间的所有行。从 'AAA''CZZ' 范围内的键值上的键范围锁可阻止其他事务插入带有该范围内的键值(例如 'ADG''BBD''CAL')的行。

    键范围锁包括按范围-行格式指定的范围组件和行组件:

    • 范围表示保护两个连续索引项之间的范围的锁模式。

    • 行表示保护索引项的锁模式。

    • 模式表示使用的组合锁模式。键范围锁模式由两部分组成。第一部分表示用于锁定索引范围 (RangeT) 的锁类型,第二部分表示用于锁定特定键 (K) 的锁类型。这两部分用连字符 (-) 连接,例如 RangeT-K

      范围

      模式

      说明

      RangeS

      S

      RangeS-S

      共享范围,共享资源锁;可序列化范围扫描。

      RangeS

      U

      RangeS-U

      共享范围,更新资源锁;可序列化更新扫描。

      RangeI

      Null

      RangeI-N

      插入范围,空资源锁;用于在索引中插入新键之前测试范围。

      RangeX

      X

      RangeX-X

      排他范围,排他资源锁;用于更新范围中的键。

    注意 注意

    内部空锁模式与所有其他锁模式兼容。

    键范围锁模式有一个兼容性矩阵,表示哪些锁与在重叠键和范围上获取的其他锁兼容。有关完整的锁兼容性矩阵,请参阅锁兼容性

    现有的授权模式

    请求的模式

    S

    U

    X

    RangeS-S

    RangeS-U

    RangeI-N

    RangeX-X

    共享 (S)

    更新 (U)

    排他 (X)

    RangeS-S

    RangeS-U

    RangeI-N

    RangeX-X

    当键范围锁与其他锁重叠时,将创建转换锁。

    锁 1

    锁 2

    转换锁

    S

    RangeI-N

    RangeI-S

    U

    RangeI-N

    RangeI-U

    X

    RangeI-N

    RangeI-X

    RangeI-N

    RangeS-S

    RangeX-S

    RangeI-N

    RangeS-U

    RangeX-U

    在不同的复杂环境下(有时是在运行并发进程时),可以在一小段时间内观察到转换锁。

    键范围锁定确保以下操作是可序列化的:

    • 范围扫描查询

    • 对不存在的行的单独提取

    • 删除操作

    • 插入操作

    必须满足下列条件才能发生键范围锁定:

    • 事务隔离级别必须设置为 SERIALIZABLE。

    • 查询处理器必须使用索引来实现范围筛选谓词。例如,SELECT 语句中的 WHERE 子句可以用以下谓词建立范围条件:ColumnX BETWEEN N'AAA' AND N'CZZ'。仅当 ColumnX 被一个索引键覆盖时,才能获取键范围锁。

    以下表和索引用作随后的键范围锁定示例的基础。

    具有索引 B 树图的数据库表

    范围扫描查询

    为了确保范围扫描查询是可序列化的,每次在同一事务中执行的相同查询应返回同样的结果。其他事务不能在范围扫描查询中插入新行;否则这些插入将成为幻插入。例如,以下查询将使用上图中的表和索引:

    SELECT name
        FROM mytable
        WHERE name BETWEEN 'A' AND 'C';
    

    键范围锁放置在与数据行范围(名称在值 Adam 与 Dale 之间的行)对应的索引项上,以防止添加或删除满足上述查询条件的新行。尽管此范围中的第一个名称是 Adam,但是此索引项上的 RangeS-S 模式键范围锁确保了以字母 A 开头的新名称(例如 Abigail)不能添加在 Adam 之前。同样,Dale 索引项上的 RangeS-S 键范围锁确保了以字母 C 开头的新名称(例如 Clive)不能添加在 Carlos 之后。

    注意注意

    包含的 RangeS-S 锁数量为 n+1,此处 n 是满足查询条件的行数。

    对不存在的数据的单独提取

    如果事务中的查询试图选择不存在的行,则以后在相同的事务中发出这一查询时,必须返回相同的结果。不允许其他事务插入不存在的行。例如,对于下面的查询:

    SELECT name
        FROM mytable
        WHERE name = 'Bill';
    

    键范围锁放置在与从 BenBing 的名称范围对应的索引项上,因为名称 Bill 将插入到这两个相邻的索引项之间。RangeS-S 模式键范围锁放置在索引项 Bing 上。这样可阻止其他任何事务在索引项 Ben Bing 之间插入值(例如 Bill)。

    删除操作

    在事务中删除值时,在事务执行删除操作期间不必锁定该值所属的范围。锁定删除的键值直至事务结束足以保持可序列化性。例如,对于下面的 DELETE 语句:

    DELETE mytable
        WHERE name = 'Bob';
    

    排他锁(X 锁)放置在与名称 Bob 对应的索引项上。其他事务可以在删除的值 Bob 的前后插入或删除值。但是任何试图读取、插入或删除值 Bob 的事务都将被阻塞,直到删除的事务提交或回滚为止。

    可以使用三个基本锁模式执行范围删除:行锁、页锁或表锁。行、页或表锁定策略由查询优化器确定,或者可以由用户通过优化程序提示(例如 ROWLOCK、PAGLOCK 或 TABLOCK)来指定。当使用 PAGLOCK 或 TABLOCK 时,如果从某个索引页中删除所有的行,则数据库引擎将立即释放该索引页。相反,当使用 ROWLOCK 时,所有删除的行只是标记为已删除;以后通过后台任务从索引页中删除它们。

    插入操作

    在事务中插入值时,在事务执行插入操作期间不必锁定该值所属的范围。锁定插入的键值直至事务结束足以维护可序列化性。例如,对于下面的 INSERT 语句:

    INSERT mytable VALUES ('Dan');
    

    RangeI-N 模式键范围锁放置在与名称 David 对应的索引项上,以测试范围。如果已授权锁,则插入 Dan,并且排他锁(X 锁)将放置在值 Dan 上。RangeI-N 模式键范围锁仅对测试范围是必需的,而不在执行插入操作的事务期间保留。其他事务可以在插入的值 Dan 的前后插入或删除值。但是,任何试图读取、插入或删除值 Dan 的事务都将被阻塞,直到插入的事务提交或回滚为止。

    相关文章
    相关标签/搜索
    白小姐期期准开奖结果管家婆王中王开奖王,管家婆铁算盘一句解特,2019香港开奖结果记录,2019六开彩开奖结果,4887铁算盘资料 普格县| 古蔺县| 闸北区| 普格县| 吴堡县| 永顺县| 大兴区| 西林县| 长宁区| 扶沟县| 克拉玛依市| 揭东县| 石门县| 克拉玛依市| 福贡县| 凭祥市| 灵山县| 碌曲县| 福州市| 图们市| 宝鸡市| 阳城县| 荔浦县| 镇巴县| 图木舒克市| 宣城市| 隆林| 江达县| 辉南县| 银川市| 五常市| 谷城县| 叶城县| 辉县市| 平山县| 西城区| 克山县| 阿拉善右旗| 日土县| 贡嘎县| 上高县| 右玉县| 江川县| 攀枝花市| 高要市| 新津县| 黑河市| 阳山县| 晋宁县| 大厂| 鸡泽县| 宁城县| 武夷山市| 富顺县| 漳平市| 弋阳县| 贵定县| 襄樊市| 环江| 芦溪县| 精河县| 陇西县| 道真| 邳州市| 兴和县| 曲阳县| 湟中县| 木里| 岑溪市| 无为县| 汕尾市| 灵石县| 宝鸡市| 稷山县| 车致| 郸城县| 区。| 藁城市| 东辽县| 平陆县| 西贡区| 满城县| 陵川县| 新乡市| 根河市| 清水河县| 潼南县| 油尖旺区| 宁津县| 林周县| 玛沁县| 塔城市| 和硕县| 弥勒县| 平武县| 万年县| 和平区| 泰宁县| 通道| 西安市| 扎赉特旗| 辛集市| 绥中县| 沁源县| 高阳县| 鸡泽县| 庆城县| 华宁县| 钟山县| 中方县| 辽宁省| 河东区| 吉安县| 弥勒县| 手游| 蓬安县| 汉阴县| 眉山市| 五峰| 景宁| 大厂| 宝坻区| 祁阳县| 杭锦后旗| 长治县| 玉林市| 福贡县| 固阳县| 当涂县| 上高县| 宁晋县| 亚东县| 玉溪市| 余干县| 隆林| 朝阳区| 遂平县| 南宫市| 和平县| 娱乐| 宝鸡市| 永清县| 建湖县| 南康市| 南雄市| 张家界市| 广丰县| 舟山市| 泰顺县| 大兴区| 吉水县| 宾川县| 巴彦淖尔市| 龙川县| 嘉峪关市| 娄烦县| 华安县| 潞西市| 康定县| 乌兰县| 伊吾县| 沙坪坝区| 维西| 和硕县| 西盟| 景宁| 英德市| 恭城| 天峻县| 昌图县| 瑞昌市| 灵宝市| 驻马店市| 鄂托克前旗| 永春县| 衢州市| 娱乐| 新源县| 获嘉县| 临安市| 南京市| 项城市| 宁蒗| 离岛区| 巴彦淖尔市| 陆丰市| 高尔夫| 呼图壁县| 色达县| 舞阳县| 航空| 台中县| 枣庄市| 宁远县| 遂宁市| 碌曲县| 通州市| 保靖县| 内江市| 荔波县| 罗定市| 无为县| 闸北区| 三河市| 大竹县| 柳州市| 岫岩| 乌兰察布市| 麻栗坡县| 平乡县| 弋阳县| 霍邱县| 平阳县| 岳阳市| 岑巩县| 疏勒县| 耿马| 北宁市| 洛南县| 竹溪县| 天台县| 山阴县| 琼海市| 称多县| 浙江省| 电白县| 临漳县| 缙云县| 濉溪县| 鸡东县| 黄梅县| 乌兰浩特市| 新巴尔虎左旗| 乃东县| 长葛市| 桓仁| 宁夏| 马边| 紫阳县| 五大连池市| 社会| 丰宁| 崇阳县| 荣成市| 乐平市| 石家庄市| 察隅县| 滁州市| 莫力| 繁昌县| 德昌县| 凤凰县| 浮山县| 邻水| 永州市| 咸丰县| 鄄城县| 博罗县| 东兴市| 三穗县| 上思县| 余干县| 平遥县| 夏河县| 宜城市| 巩义市| 康乐县| 忻州市| 龙岩市| 泸州市| 甘南县| 榕江县| 措美县| 贵南县| 金平| 辉县市| 蓬安县| 普宁市| 阳谷县| 普洱| 土默特右旗| 大洼县| 奉节县| 龙江县| 罗甸县| 江山市| 托克托县| 达拉特旗| 井研县| 海晏县| 凤山县| 和龙市| 卓资县| 普格县| 固原市| 新沂市| 文安县| 阳山县| 镇宁| 拉萨市| 高碑店市| 秦皇岛市| 古浪县| 阜康市| 西充县| 什邡市| 文昌市| 上高县| 沛县| 嵩明县| 仙桃市| 乌什县| 启东市| 靖远县| 南昌市| 荥经县| 宁蒗| 比如县| 凤庆县| 瑞丽市| 曲松县| 札达县| 昂仁县| 吴堡县| 博罗县| 金湖县| 察雅县| 望奎县| 清涧县| 永吉县| 贵港市| 大关县| 滦南县| 乌海市| 东光县| 托里县| 辛集市| 吐鲁番市| 上思县| 桂东县| 抚远县| 沙雅县| 永修县| 安龙县| 于田县| 吴桥县| 武宁县| 衡阳市| 汉阴县| 阿坝| 镇平县| 湘阴县| 会同县| 普陀区| 读书| 铅山县| 嵩明县| 义乌市| 乌拉特后旗| 洛隆县| 宁安市| 泰顺县| 监利县| 云梦县| 济南市| 大英县| 竹山县| 根河市| 内丘县| 北海市| 常宁市| 临武县| 武邑县| 永春县| 云阳县| 宜君县| 杂多县| 句容市| 神农架林区| 通江县| 柯坪县| 松桃| 定安县| 平果县| 浮梁县| 宜兰市| 泌阳县| 林口县| 江永县| 阜城县| 五台县| 武强县| 柳河县| 梁山县| 商城县| 水城县| 太白县| 武鸣县| 济阳县| 逊克县| 华宁县| 高青县| 高碑店市| 宁海县| 兴宁市| 阿拉善右旗| 新晃| 伊金霍洛旗| 昆明市| 视频| 广西| 冷水江市| 鄱阳县| 浦东新区| 教育| 南充市| 沙洋县| 卢湾区| 道孚县| 新安县| 峨山| 阜新| 乌拉特后旗| 远安县| 雅江县| 元朗区| 广灵县| 招远市| 黑河市| 昆山市| 呼和浩特市| 上高县| 普兰店市| 高淳县| 防城港市| 沁水县| 新泰市| 清水县| 遵义县| 裕民县| 康保县| 如皋市| 杂多县| 牟定县| 盐亭县| 阜新市| 页游| 寿阳县| 信宜市| 裕民县| 沙洋县| 华亭县| 天台县| 驻马店市| 尼玛县| 西宁市| 莎车县| 叙永县| 濉溪县| 杭锦后旗| 夹江县| 凤山县| 桐柏县| 台安县| 岐山县| 江陵县| 斗六市| 额尔古纳市| 湟中县| 多伦县| 依兰县| 含山县| 南平市| 电白县| 信阳市| 湖北省| 上林县| 贡山| 凯里市| 盐池县| 沙洋县| 镇沅| 嫩江县| 平罗县| 普兰店市| 广汉市| 衡水市| 固镇县| 鄱阳县| 吉首市| 偃师市| 潢川县| 玉环县| 晋宁县| 石首市| 平潭县| 葫芦岛市| 宝坻区| 保山市| 井陉县| 余干县| 天全县| 清原| 濉溪县| 青川县| 吉首市| 年辖:市辖区| 图木舒克市| 古丈县| 宁波市| 通化市| 甘德县| 随州市| 柏乡县| 汕尾市| 锡林郭勒盟| 南川市| 海原县| 六安市| 龙川县| 临夏市| 西盟| 仁化县| 古丈县| 南康市| 卢龙县| 南郑县| 柯坪县| 洪江市| 高清| 临泉县| 大理市| 南开区| 安义县| 鄂州市| 南川市| 黔南| 万源市| 灵川县| 富顺县| 荔浦县| 铜鼓县| 湖州市| 辽宁省| 洛扎县| 陆川县| 抚顺县| 徐水县| 扶绥县| 喀什市| 辽宁省| 乌拉特后旗| 阿克陶县| 南溪县| 攀枝花市| 平南县| 修武县| 贺州市| 射阳县| 南和县| 岳阳市| 鄂尔多斯市| 洛南县| 兰考县| 娄底市| 化隆| 钦州市| 马龙县| 江北区| 全南县| 桦甸市| 阆中市| 长乐市| 宣武区| 兰坪| 清镇市| 临沂市| 孙吴县| 子长县| 永春县| 高台县| 徐水县| 海晏县| 尚志市| 安远县| 通河县| 芜湖市| 光山县| 株洲市| 开封县| 资中县| 嵊州市| 隆化县| 习水县| 星子县| 台北县| 黄山市| 昆明市| 桦川县| 日照市| 仙桃市| 宜昌市| 景德镇市| 沙洋县| 唐河县| 温州市| 扎兰屯市| 长白| 成都市| 高唐县| 丰原市| 建湖县| 北流市| 常山县| 鹤庆县| http://jx1870instancev.fun http://wap.jx1870exercisev.fun http://wap.jx1870giftv.fun http://m.hz0j1r2vo.fun http://m.jx1870groupv.fun http://jx1870jobv.fun http://www.jx1870golfv.fun http://www.jx1870housev.fun http://www.hz0j3r2vo.fun http://wap.jx1870fantasyv.fun http://m.jx1870flightv.fun http://www.jx1870foxv.fun http://wap.jx1870grantv.fun http://jx1870hearv.fun http://jx1870inventoryv.fun http://m.jx1870labelv.fun http://www.jx1870farzv.fun http://www.jx1870issuev.fun