数据库死锁了,看死锁进程竟然是一个单表检索单字段语句(根据条件也肯定只指向一条记录),这个语句是加了with nolock的,这样的死锁是如何产生的啊?被之影响的是另一个表的检索语句,也是单表检索.

解决方案 »

  1.   

    1 如何锁一个表的某一行A 连接中执行SET TRANSACTION ISOLATION LEVEL REPEATABLE READbegin transelect * from tablename with (rowlock) where id=3waitfor delay '00:00:05'commit tranB连接中如果执行update tablename set colname='10' where id=3 --则要等待5秒update tablename set colname='10' where id<>3 --可立即执行2 锁定数据库的一个表SELECT * FROM table WITH (HOLDLOCK) 
    注意: 锁定数据库的一个表的区别SELECT * FROM table WITH (HOLDLOCK) 
    其他事务可以读取表,但不能更新删除SELECT * FROM table WITH (TABLOCKX) 
    其他事务不能读取表,更新和删除
      

  2.   

    select * from 表a  死锁进程就是这样的语句,因为这个只有一个地方会用到,我查那段程序,代码写的是 select * from 表a with (NoLock)
      

  3.   

    估计你是跟踪错误了,如果你用nolock的话,不会出现死锁的;
      

  4.   

    select * from 表a 死锁进程就是这样的语句,因为这个只有一个地方会用到,我查那段程序,代码写的是 select * from 表a with (NoLock)
      

  5.   

    遇到类似问题,求解!
    http://topic.csdn.net/u/20101216/08/30435831-266f-4ae4-88e0-b1e3a904ee60.html?61382