鎖定數據庫的一個表:
SELECT * FROM table WITH (HOLDLOCK)
注意: 鎖定數據庫的一個表的區別
區別:
SELECT * FROM table WITH (HOLDLOCK)
其他事務/語句可以讀取表,但不能更新刪除
SELECT * FROM table WITH (TABLOCKX)
其他事務/語句不能讀取表,更新和刪除
SELECT 語句中“加鎖選項”的功能說明
SQL Server提供了強大而完備的鎖機制來幫助實現數據庫系統的並發性和高性能。用戶既能使用SQL Server的缺省設置也可以在select 語句中使用“加鎖選項”來實現預期的效果。 本文介紹了SELECT語句中的各項“加鎖選項”以及相應的功能說明。
功能說明:
NOLOCK(不加鎖)
此選項被選中時,SQL Server 在讀取或修改數據時不加任何鎖。 在這種情況下,用戶有可能讀取到未完成事務(Uncommited Transaction)或回滾(Roll Back)中的數據, 即所謂的“髒數據”。
執行時不發出共享鎖,允許髒讀 ,等於 READ UNCOMMITTED事務隔離級別
HOLDLOCK(保持鎖)
此選項被選中時,SQL Server 會將此共享鎖保持至整個事務結束,而不會在途中釋放。
持有共享鎖,直到整個事務完成,應該在被鎖對象不需要時立即釋放,等於SERIALIZABLE事務隔離級別
UPDLOCK(修改鎖)
此選項被選中時,SQL Server 在讀取數據時使用修改鎖來代替共享鎖,並將此鎖保持至整個事務或命令結束。使用此選項能夠保證多個進程能同時讀取數據但只有該進程能修改數據。 強制在讀表時使用更新而不用共享鎖。
TABLOCK(表鎖)
此選項被選中時,SQL Server 將在整個表上置共享鎖直至該命令結束。 這個選項保證其他進程只能讀取而不能修改數據。
強制使用獨占表級鎖,這個鎖在事務期間阻止任何其他事務使用這個表
PAGLOCK(頁鎖)
此選項為默認選項, 當被選中時,SQL Server 使用共享頁鎖。在使用一個表鎖的地方用多個頁鎖
TABLOCKX(排它表鎖)
此選項被選中時,SQL Server 將在整個表上置排它鎖直至該命令或事務結束。這將防止其他進程讀取或修改表中的數據。
READPAST
讓sql server跳過任何鎖定行,執行事務,適用於READ UNCOMMITTED事務隔離級別只跳過RID鎖,不跳過頁,區域和表鎖
ROWLOCK
強制使用行鎖。
例子:
begin tran
select * from test_table with (TABLOCKX) //表鎖
commit tran
這時,其它語句,比如select * from test_table將只能等待