sql server中的鎖描述

SQL Server系統中建議讓系統自動管理鎖,該系統會分析用戶的SQL語句需要,自動爲該請求加上合適的鎖,而且在鎖的數目太多時,系統會自動進行鎖升級。升級的門限由系統自動配置,並無需用戶配置。 如果在實際應用中爲了保持數據一致懷,可以爲數據庫的某個表加鎖。比如,在某應用程式的一個事務操作中,需要根據一張表對幾個數據表做統計操作,爲確保統計數據時間的一致性和正確性,從統計第一個表開始到全部表結束,其他應用程式或事務不能再對這幾個表寫入數據,這個時候,該應用程式希望在從統計第一個數據表開始或在整個事務開始時能夠由程序人爲地(顯式地)鎖定這幾個表,這就需要用到手工加鎖(也稱顯式加鎖)。
能夠使用 SELECT、INSERT、UPDATE 和 DELETE 語句指定表級鎖定提示的範圍,以引導數據庫使用所需的鎖類型。當需要對對象所獲得鎖類型進行更精細控制時,使用表級鎖定提示更改默認的鎖定行爲。 .
所指定的表級鎖定提示有如下幾種:

1. HOLDLOCK: 將共享鎖保留到事務完成,而不是在相應的表、行或數據頁不再需要時就立即釋放鎖。HOLDLOCK 等同於 SERIALIZABLE。

2. NOLOCK:不要發出共享鎖,並且不要提供排它鎖。當此選項生效時,可能會讀取未提交的事務或一組在讀取中間回滾的頁面。有可能發生髒讀。僅應用於    SELECT 語句。

3. PAGLOCK:在通常使用單個表鎖的地方採用頁鎖。(通常添加表鎖)

4. READCOMMITTED:用與運行在提交讀隔離級別的事務相同的鎖語義執行掃描。默認情況下,SQL Server 2000 在此隔離級別上操作。

5. READPAST: 跳過鎖定行。此選項導致事務跳過由其它事務鎖定的行(這些行平常會顯示在結果集內),而不是阻塞該事務,使其等待其它事務釋放在這些行上的鎖。READPAST 鎖提示僅適用於運行在提交讀隔離級別的事務,並且只在行級鎖之後讀取。僅適用於 SELECT 語句。

6. READUNCOMMITTED:等同於NOLOCK。

7. REPEATABLEREAD:用與運行在可重複讀隔離級別的事務相同的鎖語義執行掃描。

8. ROWLOCK:使用行級鎖,而不使用粒度更粗的頁級鎖和表級鎖。

9. SERIALIZABLE:用與運行在可串行讀隔離級別的事務相同的鎖語義執行掃描。等同於 HOLDLOCK。

10. TABLOCK:使用表鎖代替粒度更細的行級鎖或頁級鎖。在語句結束前,SQL Server 一直持有該鎖。但是,如果同時指定 HOLDLOCK,那麼在事務結束之前,鎖將被一直持有。

11. TABLOCKX:使用表的排它鎖。該鎖可以防止其它事務讀取或更新表,並在語句或事務結束前一直持有。

12.   UPDOCK:  讀取表時使用更新鎖,而不使用共享鎖,並將鎖一直保留到語句或事務的結束。UPDLOCK 的優點是允許您讀取數據(不阻塞其它事務)並在以後更新數據,同時確保自從上次讀取數據後數據沒有被更改。

13.  XLOCK:  使用排它鎖並一直保持到由語句處理的所有數據上的事務結束時。可以使用 PAGLOCK 或 TABLOCK 指定該鎖,這種情況下排它鎖適用於適當級別的粒度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章