2个会话。。。
/*创建表t1,c1列聚集索引,c2非聚集索引,c3无索引*/
会话1--> 死循环update表中的非聚集索引根据聚集索引
update t1 set c2 = 5 where c1 = 5
会话2--> 死循环select c2,c3(无任何索引) from t1 where c2 between 3 and 300
检索数据后插入临时表,再执行truncate table 临时表
执行1后紧接执行2后会发生死锁现象.......
会话一 waiting select****释放S锁,得到X锁
会话二 waiting update的产生的锁
可是再执行几次后,发现死锁消失,查看了下锁进程发现select用的是覆盖索引,即显示的索引是(t1.t1)
可是我没有创建过覆盖索引。。。。
忘高手指点。
我的sqlserver是2000和2005一个实例
------解决方案--------------------
update后加个commit,然后再select