隔離級別定義事務(wù)操作資源和更新數(shù)據(jù)的隔離程度,在SQL Server中,隔離級別只會影響讀操作申請的共享鎖,而不會影響寫操作申請的互斥鎖。隔離級別控制事務(wù)在執(zhí)行讀操作時:

  • 在讀數(shù)據(jù)時是否使用共享鎖,申請何種類型的隔離級別;

  • 事務(wù)持有讀鎖的時間

  • 讀操作引用其他事務(wù)更新的數(shù)據(jù)行時,控制讀操作的行為:

    • 被阻塞,等待其他事務(wù)釋放互斥鎖;

    • 讀取事務(wù)提交后的版本,該數(shù)據(jù)行在事務(wù)開始時存在;Retrieves the committed version of the row that existed at the time the statement or transaction started.

    • 讀沒有提交的數(shù)據(jù);

在執(zhí)行寫操作時,事務(wù)持有互斥鎖,直到事務(wù)結(jié)束才釋放,互斥鎖不受事務(wù)隔離級別的影響。隔離性和并發(fā)性是此消彼長的關(guān)系。在SQL Server中,互斥鎖和任意鎖都不兼容,在同一時間,同一個數(shù)據(jù)行上,只能有一個事務(wù)持有互斥鎖,就是說,寫操作是順序進行的,不能并發(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ù)的隔離級別共有5個,使用SET命令修改Session-Level的隔離級別,使用DBCC UserOptions 查看當前Sessi

網(wǎng)友評論