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锁锁定的数据  。