多个客户端同时查询和更新一张表的问题。
这张表随时会有新数据产先。这多个客户端,每个客户端定时从这个表拿未处理的一行数据,处理后(这个处理过程时间不定)再更新回去,这种并发的取,我没做过,有什么要注意的吗?我现在最关心的是:这几个客户端并发的select这个表,会不会多个客户端都取到了同一条数据,这是不允许的,请大家给方案!谢谢。

解决方案 »

  1.   

    启动事物,定义不同的 isolation level。
      

  2.   

    肯定会取到同一条数据,加锁不管用
    如果其他人不许读取,加个字段ifselect,--读取时用事务加锁,防止其他用户同时读
    begin   tran  
    select * from tb where with(xlock,paglock) id=10
    commit   tran 
    读取记录后,把记录的ifselect 更新为1,更新后再更新为0
    为0的数据才允许读取
      

  3.   


    如果两个客户端同时都执行
    begin   tran  
    select * from tb where with(xlock,paglock) id=10
    commit   tran 难道真的会有一个查不到数据?我没法测试,不好模拟这样的并发环境啊如果真的是这样,就满足要求了。
      

  4.   


    select * from tb where with(xlock,paglock)
      

  5.   

    直接排他锁
    begin  tran  
    select * from tb where with(xlock) id=10 
    commit  tran 
    如果当前的锁不多,内存够大,不会升级为页锁或表锁,只是锁定当前受影响行
    其他进程若也访问,则会被block,一直等待下去
      

  6.   

    用with 加锁xlock,pagelock