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)
"如果我露出斑点满身,可马上转身。"
你要去做一个大人,不要回头,不要难过。