行鎖使用註意事項 1、ROWLOCK行級鎖確保在用戶取得被更新的行,到該行進行更新,這段時間內不被其它用戶所修改。因而行級鎖即可保證數據的一致性,又能提高數據操作的併發性。 2、ROWLOCK告訴SQL Server只使用行級鎖,ROWLOCK語法可以使用在SELECT,UPDATE和DELETE語 ...
行鎖使用註意事項
1、ROWLOCK行級鎖確保在用戶取得被更新的行,到該行進行更新,這段時間內不被其它用戶所修改。因而行級鎖即可保證數據的一致性,又能提高數據操作的併發性。
2、ROWLOCK告訴SQL Server只使用行級鎖,ROWLOCK語法可以使用在SELECT,UPDATE和DELETE語句中。
3、ROWLOCK指定通常採用頁鎖或表鎖時,採用行鎖。 在從 SNAPSHOT 隔離級別操作的事務中指定時,除非將 ROWLOCK 與需要鎖的其他表提示(例如,UPDLOCK 和 HOLDLOCK)組合,否則不會取得行鎖。
4、UPDLOCK指定採用更新鎖並保持到事務完成。UPDLOCK 僅對行級別或頁級別的讀操作採用更新鎖。 如果將 UPDLOCK 與 TABLOCK 組合使用或出於一些其他原因採用表級鎖,將採用排他 (X) 鎖。指定 UPDLOCK 時,忽略 READCOMMITTED 和 READCOMMITTEDLOCK 隔離級別提示。 例如,如果將會話的隔離級別設置為 SERIALIZABLE 且查詢指定 (UPDLOCK, READCOMMITTED),則忽略 READCOMMITTED 提示且使用 SERIALIZABLE 隔離級別運行事務。
5、HOLDLOCK等同於SERIALIZABLE。HOLDLOCK 僅應用於那些為其指定了 HOLDLOCK 的表或視圖,並且僅在使用了 HOLDLOCK 的語句定義的事務的持續時間內應用。 HOLDLOCK 不能被用於包含 FOR BROWSE 選項的 SELECT 語句。
使用T-SQL腳本創建資料庫表鎖
示例:
第一步:在當前會話中鎖定數據行。
--聲明資料庫引用
use testss;
go
--聲明資料庫行鎖
begin tran tran1
select * from test1 with(rowlock,updlock) where id='1';
waitfor delay '00:00:10';
commit tran;
go
第二步:開啟新會話,進行更新鎖定數據行。
update test1 set sex='女' where id='1';
示例結果:事務延遲提交十秒,在事務未提交之前進行更新會發生進程阻塞,更新是失敗的,事務提交完成後行鎖被釋放更新才能成功。