Sql死锁错误,怎么排除。与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品

daddi 2012-04-15 09:58:22
我查了一下,发现是两个语句同时处理,然后就出现错误。与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务。


这两个语句是:
1、update [Table] set clicknum=clicknum+1 where id=123456
2、select * from [Table] where clicknum>5 order by NewDate Desc

其中clicknum是加了索引的,填充因子0.6。

为了解决这个问题,我将语句一改为两句,先获取点击数,再加一,然后再更新,问题消失。

我估计问题是 update [Table] set clicknum=clicknum+1 where id=123456 这个语句的问题
这个语句一开始是查clicknum的数值,是共享锁,
后赋值,就转为独占锁了。这样容易出问题。

不知道是不是这样的。这两个语句应该怎么改才不冲突呢?

...全文
231 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogodiy 2012-04-16
  • 打赏
  • 举报
回复
把第2句改为:
select * from [Table] with(nolock) where clicknum>5 order by NewDate Desc
允许脏读。
daddi 2012-04-15
  • 打赏
  • 举报
回复
http://blog.csdn.net/yanjiangbo/article/details/4492772

暂时找到这个办法,先试试。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧