• sql server 锁


     锁模式

    锁模式

    说明

    共享 (S)

    用于不更改或不更新数据的读取操作,如 SELECT 语句。

    更新 (U)

    用于可更新的资源中。 防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。

    排他 (X)

    用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。 确保不会同时对同一资源进行多重更新。

    意向

    用于建立锁的层次结构。 意向锁包含三种类型:意向共享 (IS)、意向排他 (IX) 和意向排他共享 (SIX)。

    架构

    在执行依赖于表架构的操作时使用。 架构锁包含两种类型:架构修改 (Sch-M) 和架构稳定性 (Sch-S)。

    大容量更新 (BU)

    在向表进行大容量数据复制且指定了 TABLOCK 提示时使用。

    键范围

    当使用可序列化事务隔离级别时保护查询读取的行的范围。 确保再次运行查询时其他事务无法插入符合可序列化事务的查询的行。

    锁的粒度

    资源

    说明

    RID

    用于锁定堆中的单个行的行标识符。

    KEY

    索引中用于保护可序列化事务中的键范围的行锁。

    PAGE

    数据库中的 8 KB 页,例如数据页或索引页。

    EXTENT

    一组连续的八页,例如数据页或索引页。

    HoBT

    堆或 B 树。 用于保护没有聚集索引的表中的 B 树(索引)或堆数据页的锁。

    TABLE

    包括所有数据和索引的整个表。

    FILE

    数据库文件。

    APPLICATION

    应用程序专用的资源。

    METADATA

    元数据锁。

    ALLOCATION_UNIT

    分配单元。

    DATABASE

    整个数据库。

    用rowlock实现行锁

    --连接一
    begin tran
    select * from B with(rowlock,holdlock)--加上行锁
    where id=1
    waitfor delay '00:01:00'--等待60秒提交事务
    commit tran
    --连接二
    update B 
    set name='a1'
    where id=1--会堵塞
    
    
    update B 
    set name='a1'
    where id=2--不会堵塞

    要实现表的行锁,必须要有主键,因为行锁只能运用于主键,没有主键的话只能是表锁。

  • 相关阅读:
    supervisor 3.0a81 安装失败
    nginx使用HttpImageFilterModule
    docky模式下背景不透明
    一堆DLL中找一个类
    Python中序列化处理之——marshal和cPickle篇
    Mercurial host fingerprint warning
    Python中时间的处理之——tzinfo篇
    ServiceStack.Redis的问题与修正
    Python中时间的处理之——datetime篇
    Rdesktop 1.6.0 and Windows Server 2008 SP2
  • 原文地址:https://www.cnblogs.com/haomo/p/5822770.html
Copyright © 2020-2023  润新知