資料庫事務和鎖

2022-08-16 04:03:23 字數 1635 閱讀 7846

(鎖+回滾)作為工作單元執行的一系列操作。

顯式事務和隱式事務

排它鎖exclusive lock

共享鎖shared lock

更新鎖 

相容共享鎖,不相容更新鎖、排它鎖

意向鎖目的:在較高粒度級別有效監測不相容的鎖定請求,防止授予不相容的鎖。

架構鎖其他更高階鎖事務之間相互制約的關係就是鎖的相容性。

可鎖定資源型別或粒度資源,包括rid 或者key(行) 、page(頁) 、 物件(如:表) 、資料庫等。

其他更高階的可鎖定型別:extent(區,表在物理上可以分為多個更小單元,即分割槽)、分配單元(allocation_unit) 、堆(heap) 、b-tree

行位於頁中,頁是包含表或者索引資料的物理資料塊

為了獲得特定資源型別上的鎖,事務必須在更高的粒度級別上獲得相同模式的意向鎖。

sql server可以先獲得細粒度的鎖(如行、頁鎖),在某些情況下嘗試公升級為更粗粒度的鎖(如表鎖)。例如:單個語句獲得至少5000個鎖時,就觸發鎖公升級。(?)

決定如何控制併發使用者讀寫資料的操作。讀操作預設使用共享鎖,寫操作需要使用排它鎖。對於操作獲得的鎖,以及鎖的持續時間來說,雖然不能控制寫的操作方式,但可以控制讀操作的行為方式,隱含得影響寫操作的行為。

設定方式:1.會話選項設定隔離級別 set  transaction   isolation   level   2.查詢級別上使用表提示設定隔離級別  select  。。。 from with ()

6個隔離級別

read uncommitted 未提交讀  (nolock) 讀操作不請求共享鎖,允許髒讀

read committed 已提交讀 (default) 防止髒讀的最低隔離級別,讀操作必須獲取共享鎖才能操作。此隔離級別中,讀操作已完成就立即釋放資源上的共享鎖。讀操作不會在事務持續期間內保留共享鎖。甚至,在語句結束前也不能保留共享鎖。這意味著乙個事務內對相同資料資源的讀操作之間,沒有共享鎖會鎖定該資源。其他事務可以在兩個讀操作之間修改該資源,導致兩次取到不同的值。這種現象稱為:不可重複讀

reapeatable read 可重複讀  事務中的讀操作需要獲取共享鎖才能讀取資料,而且共享鎖將一直保持到事務完成為止。

serializable可序列化  (hodelock) 上乙個隔離級別(repeatable read)中事務在第一次讀取某些行後,可以重複讀取這些行。但是事務只是鎖定第一次查詢找到的那些資源(如:行),如果其他事務插入新行,而且新行滿足讀操作的查詢條件,那麼第二次讀取的結果會包含新行。這種新行為成為幻讀。

snapshot 快照

read committed snapshot 已經提交讀隔離

隔離級別總結

獲取隔離級別 :dbcc useroptions 

設定隔離級別:set tran isolation level [read uncommitted]

等待 waitfor delay '00:00:15'

事務隔離級別

資料庫事務和鎖

事務是作為單個邏輯工作單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性 原子性,一致性,隔離性和永續性 acid 屬性。事務的回滾 將顯式事務或者隱式事務回滾到事務的起始點或者是事務內的儲存點。關於鎖的引入 併發導致的幾種問題 引入鎖既可以在一段時間內禁止使用者做某些操作以免導致產生資料不一致。...

資料庫事務隔離和鎖

資料庫事務隔離和鎖的東西,學習了一下,現講解一下自己的理解 事務 把多條sql語句作為乙個整體和資料庫互動。這裡需要注意,乙個事務可有多條sql語句,雖然這些sql語句最終的結果變成乙個整體,要成功都成功,要失敗都失敗,但是,裡面的每條sql語句卻是單條執行的。資料庫事務隔離 講的是多個事務 操作同...

資料庫事務和鎖機制

前幾日有乙個獵頭公司的面試,其中問道我事務隔離這塊的知識點,猛一問真是想不起來啊,頓感羞愧啊,回來專門總結一下這方面的知識來夯實一下之前的知識體系,也提醒廣大園友們進步在於總結啊,好多不用的知識點,有時候有必要溫故知新啊。簡介 acid,是指在可靠資料庫管理系統 dbms 中,事務 transact...