SQL Server锁的种类与区分 |
本文标签:SQL Server锁 以下的文章主要描述的是SQL Server锁的种类 。以及对SQL Server数据库锁的类别的区分的两种方案的描述,以下就是SQL Server锁的种类与区分锁的方案具体方案的描述,希望在你今后的学习中会有所帮助 。 锁的类别有两种分法: 从数据库系统的角度来看:分为独占锁(即排它锁),共享 SQL Server锁和更新锁 MS-SQL Server 使用以下资源锁模式 。 锁模式 描述 共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句 。 更新 (U) 用于可更新的资源中 。防止当多个会话在读取、 SQL Server锁定以及随后可能进行的资源更新时发生常见形式的死锁 。 排它 (X) 用于数据修改操作,例如 INSERT、UPDATE 或 DELETE 。确保不会同时同一资源进行多重更新 。 意向锁 用于建立锁的层次结构 。意向锁的类型为:意向共享 (IS)、意向排它 (IX) 以及与意向排它共享 (SIX) 。 架构锁 在执行依赖于表架构的操作时使用 。架构锁的类型为:架构修改 (Sch-M) 和架构稳定性 (Sch-S) 。 大容量更新 (BU) 向表中大容量复制数据并指定了 TABLOCK 提示时使用 。 共享锁 共享 (S) 锁允许并发事务读取 (SELECT) 一个资源 。资源上存在共享 (S) 锁时,任何其它事务都不能修改数据 。一旦已经读取数据,便立即释放资源上的共享 (S) 锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用 SQL Server锁定提示保留共享 (S) 锁 。 更新锁 更新 (U) 锁可以防止通常形式的死锁 。一般更新模式由一个事务组成,此事务读取记录,获取资源(页或行)的共享 (S) 锁,然后修改行,此操作要求锁转换为排它 (X) 锁 。如果两个事务获得了资源上的共享模式锁,然后试图同时更新数据,则一个事务尝试将锁转换为排它 (X) 锁 。共享模式到排它锁的转换必须等待一段时间,因为一个事务的排它锁与其它事务的共享模式锁不兼容;发生锁等待 。第二个事务试图获取排它 (X) SQL Server锁以进行更新 。由于两个事务都要转换为排它 (X) 锁,并且每个事务都等待另一个事务释放共享模式锁,因此发生死锁 。 若要避免这种潜在的死锁问题,请使用更新 (U) 锁 。一次只有一个事务可以获得资源的更新 (U) 锁 。如果事务修改资源,则更新 (U) 锁转换为排它 (X) 锁 。否则,锁转换为共享锁 。 排它锁 排它 (X) 锁可以防止并发事务对资源进行访问 。其它事务不能读取或修改排它 (X) SQL Server锁锁定的数据 。 |