MSSQL(SQL Server)在個人印象中很容易鎖表,大體緣由就是你在一個窗口中執行的DML語句沒有提交,而後又打開了一個窗口對相同的表進行CRUD操做,這樣就會致使鎖表。鎖表是一種保持數據一致性的措施。sql
下面是鎖表、查詢被鎖表、解鎖被鎖表的相關語句。session
-- 鎖表(其它事務不能讀、更新、刪除) 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)
"若是我露出斑點滿身,可立刻轉身。"spa