有一张表T,是预先写入一些有效数据;每个用户登录系统操作一个交易流程时,都要从T表中获取个有效记录,然后将该记录注销掉,证明该条记录已被使用;
表T
ID    stat(状态)用户要操作一个交易流程
从T表中取一个最小的有效ID
select min(id) from t where stat=1
然后用获取的id做其他数据交易
最后将T表的该条记录注销 update T set stat=0 where id='0'现在就是有可能多个用户同时操作,是不是会取到同一个MIN(id)
有什么方法可以避免么?另外我几个帖子都没人回答,都没法结贴啊 杯具啊

解决方案 »

  1.   

    不知道Oracle 里有没有时间戳,处理这种并发最好的方式用时间戳,锁什么的都太强制性了。
      

  2.   

    刚百度下,oracle里有时间戳,
    现在先看下oracle里时间戳是怎么一回事;
    另外这里要如何应用时间戳呢?
      

  3.   

    select min(id) from t where stat=1 for update!锁住这条数据
      

  4.   

    在表里加个字段,用于保存时间戳,更新时判断这个栏位是不是最新的。
    用悲观锁定不错,或则可能很容易造成丢失更新。
    select *from t for update; 这样的话,只能一个用户操作完成提交后,下一个才能读取。
      

  5.   

    加一个列,类型timestamp(时间戳);
    取出数据,得到时间戳,
    更新时,对比时间戳是否相同,如果相同修改.当你修改数据后,时间戳会自动更新