msSqlServer是如何判断死锁的
时间:2011-11-24
来源:互联网
当sql发现死锁的访问后,将选择其中一个会话作为死锁牺牲品来解决死锁.
这个是msSqlServer的基本功能,我想大多数人都有所了解,
我想问的是,msSqlServer自身是如何判断2个访问发生了死锁的啊,
我做了一个简单的存储过程,然后用并发去执行,超不过10次就提示,发生了死锁,我很不理解啊.
存储过程代码SQL code
ALTER PROCEDURE [dbo].[test] AS BEGIN SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION insert dbo.temp(name) select top 1 id from TransferInformation where RecordsState<>5 declare @id int select @id=name from temp where id= @@IDENTITY update TransferInformation set RecordsState=5 where Id=@id COMMIT TRANSACTION END
大家都是调用者一个存储过程,先调用的会对temp表上锁,然后其他的访问等待,等上一个事务结束后,下一个在执行,并没死锁的可能啊.......
作者: xl2031 发布时间: 2011-11-24
作者: pcwmy 发布时间: 2011-11-24
因为你笨
作者: xl2031 发布时间: 2011-11-24
作者: xl2031 发布时间: 2011-11-24
作者: roy_88 发布时间: 2011-11-24
UPDATE TOP (1) TransferInformation set RecordsState=5 where RecordsState<>5
就這麼回事
作者: roy_88 发布时间: 2011-11-24
SQL code
SET ROWCOUNT 1; UPDATE TransferInformation set RecordsState=5 where RecordsState<>5; SET ROWCOUNT 0;
作者: roy_88 发布时间: 2011-11-24
SQL2000就樣用
SQL code
SET ROWCOUNT 1;
UPDATE TransferInformation
set RecordsState=5
where RecordsState<>5;
SET ROWCOUNT 0;
作者: xl2031 发布时间: 2011-11-24
SQL code
ALTER PROCEDURE [dbo].[test] AS BEGIN SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION insert dbo.temp(name) select top 1 id from TransferInformation(nolock) where RecordsState<>5 declare @id int select @id=name from temp(nolock) where id= @@IDENTITY update TransferInformation set RecordsState=5 where Id=@id COMMIT TRANSACTION END
作者: ap0405140 发布时间: 2011-11-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28