隔离级别
控制隔离数据以供一个进程使用并防止其它进程干扰的程度的事务属性。设置隔离级别定义了 SQL Server 会话中所有 SELECT 语句的默认锁定行为。
当多个事务同时进行时,通过设置隔离级别来处理脏读、不可重复读、幻读事件
read uncommitted | 0 未提交读
将查询的隔离级别指定为 0。
可以读脏数据
读脏数据:一事务对数据进行了增删改,但未提交,有可能回滚,另一事务读取了回滚前的数据
read committed | 1 已提交读
将查询的隔离级别指定为 1。
避免脏读,但可以出现不可重复读和幻读
不可重复读:一事务对数据进行了更新或删除操作,另一事务两次查询的数据不一致
幻像读:一事务对数据进行了新增操作,另一事务两次查询的数据不一致
repeatable read | 2 可重复读
将查询的事务隔离级别指定为 2。
避免脏读,不可重复读,允许幻像读
serializable | 3 可序列化
将查询的隔离级别指定为 3。
串行化读,事务只能一个一个执行,避免了脏读、不可重复读、幻读
执行效率慢(我遇到过一种情况,用时是隔离级别1的30倍),使用时慎重
SNAPSHOT
当读取数据时,可以保证读操作读取的行是事务开始时可用的最后提交版本。
这意味着这种隔离级别可以保证读取的是已经提交过的数据,并且可以实现可重复读,
也能确保不会幻读。不过这种隔离级别使用的不是共享锁,而是行版本控制。
SQL Server 2005以后的版本支持。