隔離級(jí)別定義事務(wù)操作資源和更新數(shù)據(jù)的隔離程度,在SQL Server中,隔離級(jí)別只會(huì)影響讀操作申請(qǐng)的共享鎖,而不會(huì)影響寫操作申請(qǐng)的互斥鎖。隔離級(jí)別控制事務(wù)在執(zhí)行讀操作時(shí):
在讀數(shù)據(jù)時(shí)是否使用共享鎖,申請(qǐng)何種類型的隔離級(jí)別;
事務(wù)持有讀鎖的時(shí)間
讀操作引用其他事務(wù)更新的數(shù)據(jù)行時(shí),控制讀操作的行為:
被阻塞,等待其他事務(wù)釋放互斥鎖;
讀取事務(wù)提交后的版本,該數(shù)據(jù)行在事務(wù)開始時(shí)存在;Retrieves the committed version of the row that existed at the time the statement or transaction started.
讀沒有提交的數(shù)據(jù);
在執(zhí)行寫操作時(shí),事務(wù)持有互斥鎖,直到事務(wù)結(jié)束才釋放,互斥鎖不受事務(wù)隔離級(jí)別的影響。隔離性和并發(fā)性是此消彼長(zhǎng)的關(guān)系。在SQL Server中,互斥鎖和任意鎖都不兼容,在同一時(shí)間,同一個(gè)數(shù)據(jù)行上,只能有一個(gè)事務(wù)持有互斥鎖,就是說(shuō),寫操作是順序進(jìn)行的,不能并發(fā)。
Choosing a transaction isolation level does not affect the locks acquired to protect data modifications. A transaction always gets an exclusive lock on any data it modifies, and holds that lock until the transaction completes, regardless of the isolation level set for that transaction.
事務(wù)的隔離級(jí)別共有5個(gè),使用SET命令修改Session-Level的隔離級(jí)別,使用DBCC UserOptions 查看當(dāng)前Sessi