標籤:
鎖模式
鎖模式 |
說明 |
共用 (S) |
用於不更改或不更新資料的讀取操作,如 SELECT 語句。 |
更新 (U) |
用於可更新的資源中。 防止當多個會話在讀取、鎖定以及隨後可能進行的資源更新時發生常見形式的死結。 |
排他 (X) |
用於資料修改操作,例如 INSERT、UPDATE 或 DELETE。 確保不會同時對同一資源進行多重更新。 |
意向 |
用於建立鎖的階層。 意圖鎖定包含三種類型:意圖共用 (IS)、意向排他 (IX) 和意向排他共用 (SIX)。 |
架構 |
在執行依賴於表架構的操作時使用。 架構鎖包含兩種類型:架構修改 (Sch-M) 和架構穩定性 (Sch-S)。 |
大容量更新 (BU) |
在向表進行大容量資料複製且指定了 TABLOCK 提示時使用。 |
鍵範圍 |
當使用可序列化交易隔離等級時保護查詢讀取的行的範圍。 確保再次執行查詢時其他事務無法插入符合可序列化事務的查詢的行。 |
鎖的粒度
資源 |
說明 |
RID |
用於鎖定堆中的單個行的行標識符。 |
KEY |
索引中用於保護可序列化事務中的鍵範圍的行鎖。 |
PAGE |
資料庫中的 8 KB 頁,例如資料頁或索引頁。 |
EXTENT |
一組連續的八頁,例如資料頁或索引頁。 |
HoBT |
堆或 B 樹。 用於保護沒有叢集索引的表中的 B 樹(索引)或堆資料頁的鎖。 |
TABLE |
包括所有資料和索引的整個表。 |
FILE |
資料庫檔案。 |
APPLICATION |
應用程式專用的資源。 |
METADATA |
中繼資料鎖。 |
ALLOCATION_UNIT |
配置單位。 |
DATABASE |
整個資料庫。 |
用rowlock實現行鎖
--串連一begin transelect * from B with(rowlock,holdlock)--加上行鎖where id=1waitfor delay ‘00:01:00‘--等待60秒提交事務commit tran
--串連二update B set name=‘a1‘where id=1--會堵塞update B set name=‘a1‘where id=2--不會堵塞
要實現表的行鎖,必須要有主鍵,因為行鎖只能運用於主鍵,沒有主鍵的話只能是表鎖。
sql server 鎖