大家好,以下两句sql并发时会死锁吗?我查了一些资料,得知update是锁表的,那么我能否将update产生的锁设为更细的粒度(行)呢?update tab set field1 = 'aaa' where field2='1';
update tab set field1 = 'bbb' where field2='2';注,项目的情况是这样的:
1、表中记录较多;
2、多用户并发,update那张表,但是同一时刻不可能共同操作一条记录;
3、每次update操作只针对一条记录。谢谢,谢谢~~

解决方案 »

  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.   

    update tab with(rowlock) set field1 = 'aaa' where field2='1';或加上索引的话,会自动的加上范围锁,锁定更新索引键值的范围