现在有一个用户参与活动的表,字段包含用户号码,是否中奖两个字段。
select count(1) into v_temp_count from table where gift =1;
if v_temp_count > 1 then--当一等奖已被抽掉,用户不能再中一等奖
insert into table(phone_number,gift)values(phone,0);--插入用户未中奖记录
end if;
因为服务器是集群的,所以需要在数据库端进行锁操作。但是oracle中查询是不能锁的。
那么如何保证查询count和insert在同一原子操作中呢?!
------解决方案--------------------
你的这个问题应该是这样的吧,把抽中的结果移动到另外一个表,然后删除原表抽中的用户,这两个放在一个事务中。也可以不需要按这个方式来处理,下一轮抽奖的时候,过滤条件gift字段等于0的即参加一下轮抽奖。
------解决方案--------------------
我不明白一个事情,你的代码明明是PL/SQL..为什么存在不是一个原子操作的问题呢?
本身一个BEGIN END就可以是一个事务,不管你是集群还是单机.
------解决方案--------------------
线程 事务
事务 线程
挺乱的哦.....