解决方案 »

  1.   

    会话1:
    begin transelect * from tb with(xlock) where id = 1update tb
    set col = 1
    where id = 1commit tran
    回话2:
    select * from tb with(xlock) where id = 1
    就会被锁住,查询不到东西
      

  2.   

    编辑和真正的“更新”不应该放在一起吧,如果在编辑时锁住,然后你跑去泡妞了,那整个系统都给你堵住了,根据国外大牛paul的某本书,一般应该在真正更新的时候检查数据是否满足更新条件,然后更新,这个过程中加锁,加锁的行为不要等待用户响应
      

  3.   

    提升事务隔离等级到serializable set transaction isolation level serializable
      

  4.   


    哦,那应该增加一个字段比如,status 为1表示在审批,而0表示解锁,在查询时:select *
    from tt
    where status = 0也就是只能查询解锁的
      

  5.   

    楼主题目真拗口啊。你要加锁因为是在编辑某行数据的时候,在编辑的时候,数据库会自动对表格,或者行数据加锁的,你不用再使用select ... with(xlock)再来加锁,多此一举。7楼是正确答案。