有一张表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)
有什么方法可以避免么?
另外我几个帖子都没人回答,都没法结贴啊 杯具啊
------解决方案--------------------
不知道Oracle 里有没有时间戳,处理这种并发最好的方式用时间戳,锁什么的都太强制性了。
------解决方案--------------------
关注时间戳的应用
------解决方案--------------------
select min(id) from t where stat=1 for update!锁住这条数据
------解决方案--------------------
------解决方案--------------------
悲观锁定最简单,不过并发性不是很好,乐观锁定可以考虑用对比时间戳的方式。
------解决方案--------------------
用 乐观锁,
加上 版本号 字段 或者 加上 时间戳
------解决方案--------------------
加一个列,类型timestamp(时间戳);
取出数据,得到时间戳,
更新时,对比时间戳是否相同,如果相同修改.
当你修改数据后,时间戳会自动更新