请问大家:我现在用 多线程同时更新(update)同一个数据表,但不同数据(不同记录),数据库会发生死锁吗?(目前我的程序已经发生死锁了)如果发生,这个死锁是在“行级别”还是在“表级别”?(我没有更改数据库的隔离级别。)我用的数据库是 MS SQL Server 2005。对以上实际问题的经过判断后,再次请教大家:我查资料看到,MS SQL Server 2005 死锁默认是“行级别”,update也是在“行级别”发生死锁,我就搞不明白,我多线程同时更新(update)同一个数据表,但不同记录,既然是“不同记录”,而且update的锁是发生在“行级别”,怎么就会产生死锁?
begin
update a set col1='xx'
waitfor delay '0:05'
update b set col2='xx'
endbegin
update a set col2='xx'
waitfor delay '0:05'
update b set col1='xx'
end这样就会死锁 你说这个是不是行级??已经具体到某行了
锁是个很细的东西,需要耐心分析
连线1拥有A的锁,此时想update C
连线2拥有C的锁,此时想update A
此时就无限期的互相等待了,所以叫死锁.问题的关键是,连线已经拥有的锁,例如
连线1想update C
连线2想update A
那是没问题的,何来死锁!