session1
    update t_table set score+=1 where userid=100session2
   update t_table set score+=1 where userid=100前提是userid是聚集索引,或非聚集索引

解决方案 »

  1.   

    分析死锁并处理_整理贴5
    http://bbs.csdn.net/topics/250022124
      

  2.   

    userid 是聚集索引的话是速度最快的,可以说不会,但是如果还有其他索引,特别是包含列索引,把score包含在内的,有可能死锁。如果是非聚集索引,有可能死锁。在高并发情况下,如果两个查询都获得共享锁,再升级意向更新锁,升级再更新锁(相当排它锁)。
    共享锁之间不冲突。共享锁与意向更新锁不冲突,意向更新锁之间不冲突,意向更新锁与更新锁冲突,更新锁只能有一个能获取到。所以,当两个查询有了意向更新锁,升级为更新锁时,都等待另一个释放,所以死锁。
      

  3.   

    查看死锁的定义
    https://msdn.microsoft.com/zh-cn/library/ms177433(v=sql.105).aspx你这样的情况会一直等待,程序调用会超过
      

  4.   

    程序调用通常会出现有超时,如果会话1一直不提交会阻塞数据,也会导致死锁,
    阻塞分析
    http://blog.csdn.net/roy_88/article/details/2682044