-
脏读:当一个事务更新数据,但还未提交,这时第二个数据读取数据就把刚才未提交的数据读取出来了。
-
不可重复读:一个事务读取数据,这时另一个事务更新了数据,然后第一个事务再次读取时数据改变了。一个事务多次读取数据时得到了不同的结果称为不可重复读。
-
幻读:一个事务读取特定的行,第一次读取时没数据,这时另一个事务插入数据,但第一个事务还没有结束,再次读取时就有数据了,这称为幻读。
-
未提交读:最低级别,只保证不读取物理上损坏的数据
-
提交读:默认级别,可预防脏读
-
可重复读:可预防脏读和不可重复读,但有时会出现幻影数据
-
快照:使用行版本控制来预防幻读,同时减少阻塞
-
可序列化:最高级别,要求事务序列化的一个接一个执行,不能并发执行
-
MSSQL中默认的隔离级别为Read Committed
-
DBCC USEROPTIONS查看当前SQL Server事务的隔离级别(isolation level属性列)
-
T-SQL语句中设定隔离级别:SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED/READ COMMITTED/REPEATABLE READ/SNAPSHOT/SERIALIZABLE;
-
开发环境中设定:使用 System.Data.SqlClient 托管命名空间的 ADO.NET 应用程序可以调用 SqlConnection.BeginTransaction 方法并将 IsolationLevel 选项设置为 Unspecified、Chaos、ReadUncommitted、ReadCommitted、RepeatableRead、Serializable 或 Snapshot。
代码如下:
System.Data.SqlClient.SqlConnection con = new SqlConnection();
con.BeginTransaction(IsolationLevel.ReadUncommitted);