为了取得不重复的数据,我需要从table 中一行取得可用号码,我想在读取并修改的同时,不允许其他用户读取改行,当我释放后,其他用户才允许读取修改。 应该怎么做啊?

解决方案 »

  1.   

    select ....... for update
      

  2.   

    方法1. 存储过程: select ... from table where ....  for update; 
     for update会锁定select出来的行.方法2. 在程序里: update table set column = column where ....;  这样并未改变值,但锁定了该行.直到commit; rollback;
      

  3.   

    不是吧, for update 只是不允许其他用户update或者delete ,但是还是可以select,我的想法是当我从开始读取这样数据的时候,其他用户就已经不可以在select 了,只有当我update完成以后,他们才可以读取我已经修改过的数据。   举个例子, table 中我要update的这行数据,最大的可用号是 06001,我读取后,然后update成06002,当我修改完成以后,其他用户在读取到06002,如果用for update ,那我再没有修改成06002前,其他用户还是可以读取到06001啊?  不知道我的描述详细吗?
      

  4.   

    那就先delete原来的,再Insert新的
      

  5.   

    delete 和 update 没有区别吧?同样存在这个问题阿
      

  6.   

    增加一个字段Flag
    当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1'
      

  7.   

    没有必要一个用户在Update 的时候禁止另外一个用户Select 操作的。看楼主的意思是不是想防止第二用户读取到脏数据,并在脏数据的基础上继续修改。
      

  8.   

    增加一个字段Flag
    当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1'
    ---------------
    这种方法可行。 for update的方法行不通。
      

  9.   

    或者
    select * from tab for update  skip locked
      

  10.   

    增加一个字段Flag
    当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1'
    -------------------
    这个方法不行,当修改但没有commit 的时候,其他用户看到的还是修改前的结果。