sqlserver 简单锁实例
发布时间:2020-12-12 13:55:06 所属栏目:MsSql教程 来源:网络整理
导读:/*以此表为例:SELECT * FROM tb姓名课程分数---------------------张三语文74张三数学83李四语文74李四数学84李四物理94*/--新建第一个会话窗口,执行以下语句:BEGIN TRAN UPDATE dbo.tb SET 分数 = 85WHERE 姓名 = '张三'AND课程 = '语文'--COMMIT TRAN--新
/*以此表为例: SELECT * FROM tb 姓名 课程 分数 --------------------- 张三 语文 74 张三 数学 83 李四 语文 74 李四 数学 84 李四 物理 94 */ --新建第一个会话窗口,执行以下语句: BEGIN TRAN UPDATE dbo.tb SET 分数 = 85 WHERE 姓名 = '张三' AND 课程 = '语文' --COMMIT TRAN --新建第二个会话窗口,执行以下语句: UPDATE dbo.tb SET 分数 = 90 WHERE 姓名 = '张三' AND 课程 = '语文' /* 此时第二个窗口一直处于执行状态; 新建第三个会话窗口,用于分析查看阻塞语句; */ --查看锁的信息,更多信息(sp_lock:http://msdn.microsoft.com/zh-cn/library/ms187749.aspx) exec sp_lock; --SELECT * FROM sys.dm_tran_locks; --比第一个信息多些 --可以看到,会话ID号 spid=54 处于等待状态,mode='U'为更新锁 --下面查看 session_id=54 是被什么会话阻塞了. SELECT blocking_session_id,wait_duration_ms,session_id FROM sys.dm_os_waiting_tasks WHERE session_id=54 go --或 EXEC sp_who2 active --BlkBy 被谁阻塞…… --结果为session_id=52阻塞了.接下来看看其运行了什么语句; SELECT t.text FROM sys.dm_exec_connections c CROSS APPLY sys.dm_exec_sql_text (c.most_recent_sql_handle) t WHERE c.session_id = 52 --直接删除session_id = 52的会话,此会话的语句中断,后面的语句正常执行; KILL 52 SELECT * FROM tb /* 姓名 课程 分数 --------------------- 张三 语文 90 张三 数学 83 李四 语文 74 李四 数学 84 李四 物理 94 */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |