行鎖使用注意事項

行鎖使用注意事項

一、ROWLOCK行級鎖確保在用戶取得被更新的行,到該行進行更新,這段時間內不被其它用戶所修改。於是行級鎖便可保證數據的一致性,又能提升數據操做的併發性。數據庫

二、ROWLOCK告訴SQL Server只使用行級鎖,ROWLOCK語法可使用在SELECT,UPDATE和DELETE語句中。併發

三、ROWLOCK指定一般採用頁鎖或表鎖時,採用行鎖。 在從 SNAPSHOT 隔離級別操做的事務中指定時,除非將 ROWLOCK 與須要鎖的其餘表提示(例如,UPDLOCK 和 HOLDLOCK)組合,不然不會取得行鎖。spa

四、UPDLOCK指定採用更新鎖並保持到事務完成。UPDLOCK 僅對行級別或頁級別的讀操做採用更新鎖。 若是將 UPDLOCK 與 TABLOCK 組合使用或出於一些其餘緣由採用表級鎖,將採用排他 (X) 鎖。指定 UPDLOCK 時,忽略 READCOMMITTED 和 READCOMMITTEDLOCK 隔離級別提示。 例如,若是將會話的隔離級別設置爲 SERIALIZABLE 且查詢指定 (UPDLOCK, READCOMMITTED),則忽略 READCOMMITTED 提示且使用 SERIALIZABLE 隔離級別運行事務。事務

五、HOLDLOCK等同於SERIALIZABLE。HOLDLOCK 僅應用於那些爲其指定了 HOLDLOCK 的表或視圖,而且僅在使用了 HOLDLOCK 的語句定義的事務的持續時間內應用。 HOLDLOCK 不能被用於包含 FOR BROWSE 選項的 SELECT 語句。it

使用T-SQL腳本建立數據庫表鎖

示例:

第一步:在當前會話中鎖定數據行。test

--聲明數據庫引用
use testss;
godate

--聲明數據庫行鎖
begin tran tran1
select * from test1 with(rowlock,updlock) where id='1';
waitfor delay '00:00:10';
commit tran;
goselect

第二步:開啓新會話,進行更新鎖定數據行。語法

update test1 set sex='女' where id='1';引用

相關文章
相關標籤/搜索