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>