SQL SERVER的隔离级别
在运用X锁和S锁这两种基本封锁,对数据对象加锁时,还需要约定一些规则,例如应何时申请X锁或S锁、持锁时间、何时释放等。这些规则被称为封锁协议(Locking Protocol)或者隔离级别。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。下面介绍三级封锁协议。不同级别的封锁协议达到的系统一致性级别是不同的,如图1所示。
图1 三级封锁协议的区别与联系
1)1级封锁协议(Read Uncommitted)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。1级封锁协议可防止丢失修改,并保证事务T是可恢复的。
在1级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。
2)2级封锁协议(Read Committed)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
在1级封锁协议的基础上,事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。2级封锁协议可防止丢失修改,还可进一步防止读“脏”数据。
3)3级封锁协议(Repeatable read)
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
在1级封锁协议的基础上,事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。3级封锁协议可防止丢失修改和不读‘脏’数据外,还进一步防止不可重复读。