SQL Server中锁与事务隔离级别

SQL Server中的锁分为两类:

共享锁

排它锁

锁的兼容性:事务间锁的相互影响称为锁的兼容性。

锁模式 是否可以持有排它锁 是否可以持有共享锁
已持有排它锁      
已持有共享锁      

SQL Server中可以锁定的资源包括:RID或键(行)、页、对象(如表)、数据库等等。

在试图修改数据(增删改)时,事务会请求数据资源的一个排它锁而不考虑事务的隔离级别。排它锁直到事务结束才会解除。对于单语句事务,语句执行完毕该事物就结束了;对于多语句事务,执行完COMMIT TRAN或者ROLLBACK TRAN命令才意味着事务的结束。

在事务持有排它锁期间,其它事务不能修改该事物正在操作的数据行,但能否读取这些行,则取决于事务的隔离级别。

在试图读取数据时,事务默认请求数据资源的共享锁,事务结束时会释放锁。可以通过事务隔离级别控制事务读取数据时锁定的处理方式。

SQL Server中事务隔离级别分为以下两大类:

基于悲观并发控制的四个隔离级别(隔离级别自上而下依此增强):

READ UNCOMMITTED

READ COMMITTED(默认)

REPEATABLE READ

SERIALIZABLE

基于乐观并发控制的两个隔离级别(隔离级别自上而下依此增强):

SNAPSHOT

READ COMMITTED SNAPSHOT(默认)

可以通过下面的语句来设置会话的隔离级别:

SET TRANSACTION ISOLATION LEVEL <isolation name>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjxws.html