sql server鎖表、查詢被鎖表、解鎖被鎖表的相關語句


MSSQL(SQL Server)在我的印象中很容易鎖表,大致原因就是你在一個窗口中執行的DML語句沒有提交,然后又打開了一個窗口對相同的表進行CRUD操作,這樣就會導致鎖表。鎖表是一種保持數據一致性的措施。

下面是鎖表、查詢被鎖表、解鎖被鎖表的相關語句。

-- 鎖表(其它事務不能讀、更新、刪除)
BEGIN TRAN
SELECT * FROM <表名> WITH(TABLOCKX);
WAITFOR delay '00:00:20'
COMMIT TRAN

-- 鎖表(其它事務只能讀,不能更新、刪除)
BEGIN TRAN
SELECT * FROM <表名> WITH(HOLDLOCK);
WAITFOR delay '00:00:20'
COMMIT TRAN

-- 鎖部分行
BEGIN TRAN
SELECT * FROM <表名>WITH(XLOCK) WHERE ID IN ('81A2EDF9-D1FD-4037-A17B-1369FD3B169B');
WAITFOR delay '00:01:20'
COMMIT TRAN

-- 查看被鎖表
select request_session_id 鎖表進程, OBJECT_NAME(resource_associated_entity_id) 被鎖表名  
from sys.dm_tran_locks where resource_type = 'OBJECT';

-- 解鎖
declare @spid  int
Set @spid  = 66 -- 鎖表進程
declare @sql varchar(1000)
set @sql = 'kill ' + cast(@spidas varchar)
exec(@sql)

 

"如果我露出斑點滿身,可馬上轉身。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM