有一张表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)
有什么方法可以避免么?另外我几个帖子都没人回答,都没法结贴啊 杯具啊
表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 *from t for update; 这样的话,只能一个用户操作完成提交后,下一个才能读取。
取出数据,得到时间戳,
更新时,对比时间戳是否相同,如果相同修改.当你修改数据后,时间戳会自动更新