Below I have describe different types of isolations available in SQL Server.
- READ COMMITTED
This transaction issue lock that other transaction can modify data.when this option set in select query then it will fetch only committed records.if any transaction is opened and incomplete then select query will wait for other transactions to be completed.
SET TRANSACTION ISOLATION LEVEL READ COMMITTED. SELECT * FROM TABLENAME.
- READ UNCOMMITTED
This transaction is not issue locks that other transactions can modify data.when this option is set in transaction then it will get all data which is currently modifying as well, this types of data called as dirty read. this option works same effect as WITH(NOLOCK).it will fetch all records which currently modifying at the same time, so, sometimes data disappeared in select query.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED. SELECT * FROM TABLENAME.
- REPEATABLE READ
With the use of this option, select query can not fetch records which currently modified but not commited by other transaction. no other transaction can read/modify records which is not commited by other transaction.current transaction can insert new rows.
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ SELECT * FROM TABLENAME.
- SERIALIZABLE
With the use of this option, other transaction can not modify data that has been read by the current transaction which is not committed by other transaction.no transaction can insert records until current transaction ends.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE SELECT * FROM TABLENAME.
- SNAPSHOT
This option same as serializable transaction. main difference over here is that it maintain versions. This transaction is not allowing lock in any table so when any select query executed at moment other session can change data in table. so snapshot transaction maintains log in tempdb if any difference is there in records at selection time it will display records from tempdb.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT SELECT * FROM TABLENAME.