解析:MicrosoftSQLServer中的锁模式

解析:MicrosoftSQLServer中的锁模式,第1张

解析:MicrosoftSQLServer中的锁模式,第2张

在锁定SQL Server数据库时,除了锁定不同的资源外,还可以使用不同的锁定方法,即有多种锁定模式。SQL Server中的锁定模式包括:

1.共享锁在SQL Server中,共享锁用于所有只读数据操作。该共享是非独占的,允许多个并发事务读取其锁定的资源。默认情况下,SQL Server会在读取数据后立即释放共享锁。例如,当执行查询“SELECT * FROM AUTHORS”时,第一页被锁定,在读取后,第一页上的锁定被释放,然后第二页被锁定。以这种方式,未锁定的第一页可以在读取操作期间被修改。但是,SELECT语句中的事务隔离级别连接选项设置和锁设置可以更改SQL Server的这一默认设置。例如,“SELECT * FROM AUTHORS HOLDLOCK”要求在整个查询过程中应该锁定表,并且在查询完成之前不应该释放锁。

2.更新锁更新锁用于在修改操作的初始阶段锁定可能被修改的资源,以避免使用共享锁导致的死锁。因为使用共享锁时,修改数据的操作分为两步。首先,获取一个共享锁,读取数据,然后将共享锁升级为独占锁,然后执行修改操作。这样,如果两个或多个事务同时为一个事务申请共享锁,这些事务在修改数据时会将共享锁升级为排他锁。此时,这些事务都不会释放共享锁,而是等待另一方释放它,从而导致死锁。如果一个数据在修改前直接申请更新锁,然后在数据修改时升级为独占锁,就可以避免死锁。

3.排他锁排他锁是为修改数据而保留的。它锁定的资源不能被其他事务读取或修改。

4.当执行表的数据定义语言(DDL)操作(如添加列或删除表)时,结构锁使用模式修改(Sch-M)锁。编译查询时使用模式稳定性(Sch-S)锁。稳定性(Sch-S)锁不阻塞任何事务锁,包括独占锁。因此,在编译查询时,其他事务(包括那些对表持有排他锁的事务)可以继续运行。但是,DDL操作不能在表上执行。

5.意向锁意向锁表示SQL Server有意在较低的资源级别获取共享锁或排他锁。例如,表级共享有意锁表示事务打算释放表中某页或某行的排他锁。意向锁可分为共享意向锁、独占意向锁和共享独占意向锁。共享意向锁表示事务打算将共享锁放在由共享意向锁锁定的低级资源上以读取数据。排他意向锁表示事务打算在由共享意向锁锁定的低级资源上放置排他锁,以修改数据。共享排他锁表示一个事务允许其他事务使用共享锁来读取顶级资源,并打算在较低级别的资源上放置排他锁。

6.批量更新锁。当将数据大容量复制到表中,并且指定了TABLOCK提示,或者sp_tableoption设置了table lock on bulk table option时,将使用大容量更新锁。批量更新锁允许进程并发地将数据批量复制到同一个表中,同时防止不批量复制数据的其他进程访问该表。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 解析:MicrosoftSQLServer中的锁模式

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情