sql server锁表、查询被锁表、解锁被锁表的相关语句

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

相关文章
相关标签/搜索