多个delphi客户端同时循环访问oracle数据库上同一个表,每个客户端每次读取100条数据,读取完以后删除记录。如何使每个客户端访问到的记录不重复? 就是每个客户端每次访问到的行数据锁定 不能被别的客户端访问。

解决方案 »

  1.   

    select ... for update可以把选择出的所有行锁住,其它事务在执行同样语句时会等待这个正在被执行的事务结束。不知道可不可以用来实现楼主的要求
      

  2.   

    select ... for update这种方法可以。是最强的一种锁
      

  3.   

    可我是在delphi程序里面用query来执行sql  这样写行吗?
      

  4.   

    for update不行啊 for update只是说别人不能修改,还是可以看的。就是说这条记录被锁定了 别的客户端还是可以select出来 我要实现的是一条记录只能被一个客户端读取,然后删除,不能同时被多个客户端select出来 
      

  5.   

    被其他人看不到。估计很难,如果要实现的话从SQL监视器中先要获得连接的用户及每个用户的SQL
    根据这些再分析修改某个用户提交的查询语句。
      

  6.   

    或者设置一个字段c 读取后更新表字段c为1,其他用户读取c不为1。关闭时候在更新查询过的字段c的状态为0。但是性能很差啊
      

  7.   

    >for update不行啊 for update只是说别人不能修改,还是可以看的。
    >就是说这条记录被锁定了 别的客户端还是可以select出来 
    >我要实现的是一条记录只能被一个客户端读取,然后删除,不能同时被多个客户端select出来 只要你所有的客户端都for update就行了。
      

  8.   

    其实SELECT FOR UPDATE 内部实现的机理 就是将修改选中的行以标记它们, 因此会导致磁盘写。