本篇文章参考《Microsoft SQL Server企业级平台管理实践》中第9章和第10章 阻塞与死锁
1、事务隔离级别
SQL Server数据库引擎支持下列隔离级别
1.1、未提交读
指定语句可以读取已由其他事务修改但尚未提交的行。也就是说,允许脏读。
未提交读的意思也就是,读的时候不申请共享锁。所以它不会被其他人的排他锁阻塞,它也不会阻塞别人申请排他锁。
SELECT * FROM TABLE WITH(NOLOCK)
1.2、已提交读
防脏读,指定语句不能读取已由其他事务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取数据和幻像数据。
1.3、可重复读
防重复读,指定语句不能读取已由其他事务修改但尚未提交的数据,并且指定,其他任何事务都不能在当前事务完成之前修改由当前事务读取的数据。
对事务中的每个语句所读取的全部数据都设置了共享锁,并且该共享锁一直保持到事务完成为止。
1.4、可序列化
防幻影,语句不能读取已由其他事务修改但尚未提交的数据
任何其他事务都不能在当前事务完成之前修改由当前事务读取的数据
在当前事务完成之前,其他事务不能使用当前事务中任何语句读取的键值插入新行
SELECT * FROM TABLE WITH(HOLDLOCK)
--隔离级别 DBCC USEROPTIONS GO SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED GO SET TRANSACTION ISOLATION LEVEL READ COMMITTED GO SET TRANSACTION ISOLATION LEVEL REPEATABLE READ GO SET TRANSACTION ISOLATION LEVEL SERIALIZABLE GO SET TRANSACTION ISOLATION LEVEL SNAPSHOT GO