加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver锁表处理

发布时间:2020-12-12 13:04:21 所属栏目:MsSql教程 来源:网络整理
导读:1.模拟锁表 //建立模拟表?CREATE???TABLE??Lock1(C1??int???default?(?0?));?CREATE???TABLE??Lock2(C1??int???default?(?0?));?INSERT???INTO??Lock1??VALUES?(?1?);?INSERT???INTO??Lock2??VALUES?(?1?); 2.发生死锁 //在新开窗口1执行?Begin???Tran????Up

1.模拟锁表


//建立模拟表
?CREATE???TABLE??Lock1(C1??int???default?(?0?));
?CREATE???TABLE??Lock2(C1??int???default?(?0?));
?INSERT???INTO??Lock1??VALUES?(?1?);
?INSERT???INTO??Lock2??VALUES?(?1?);

2.发生死锁



//在新开窗口1执行
?Begin???Tran?
???Update??Lock1??Set??C1?=?C1?+?1?;
???WaitFor??Delay??'?00:01:00?'?;
???SELECT???*???FROM??Lock2
?Rollback???Tran?;
//在新开窗口2执行
Begin???Tran?
???Update??Lock2??Set??C1?=?C1?+?1?;
???WaitFor??Delay??'?00:01:00?'?;
???SELECT???*???FROM??Lock1
?Rollback???Tran?;

3.查询发生死锁的表


select?request_session_id?spid,OBJECT_NAME(resource_associated_entity_id)?tableName?
from?sys.dm_tran_locks?where?resource_type='OBJECT'

//清除死锁注意:在新开窗口执行语句否则会发生

declare?@spid?int?Set?@spid?=121//spid为上一sql查询出来的结果这里是52、53、57
declare?@sql?varchar(1000)set?@sql='kill?'+cast(@spid?as?varchar)exec(@sql)

注:模拟死锁代码参照http://www.2cto.com/database/201309/242860.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读