常常被问道这样一个问题:同一个数据表中的数据,同时有一个人在查看一条数据,而另一个人在更改数据,那么看到的是修改前的数据还是修改后的呢

解决方案 »

  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.   

    SET TRANSACTION ISOLATION LEVEL SNAPSHOT
    select * from tttti
    -----------
    1(1 行受影响)
    select * from tttt with(nolock)还要看你更新时候表上是否加了锁。
      

  3.   


    贴少了
    窗口一create table tttt(i int)
    insert tttt select 1
    begin tran 
    update tttt
    set i=3窗口二
    SET TRANSACTION ISOLATION LEVEL SNAPSHOT
    select * from tttti
    -----------
    1(1 行受影响)
    select * from tttt with(nolock)
    i
    -----------
    3(1 行受影响)