案例说明:火车票售票系统
同时启动多个线程模拟买票
窗口首先查询出还剩余多少张票,判断是否足够,再进行更新操作
所以是一条select语句,一条update语句现在出现的问题:
第一个人买首先查询剩余20张,买了2张,update为18张
第二个人在update之前就读出了,所以他读出的剩余票数也是20张,买了2张,update为18张结果买了4张,确只减少了2张请问如何解决这个问题呢?
同时启动多个线程模拟买票
窗口首先查询出还剩余多少张票,判断是否足够,再进行更新操作
所以是一条select语句,一条update语句现在出现的问题:
第一个人买首先查询剩余20张,买了2张,update为18张
第二个人在update之前就读出了,所以他读出的剩余票数也是20张,买了2张,update为18张结果买了4张,确只减少了2张请问如何解决这个问题呢?
解决方案 »
- 能够同时支持中文英文法文的字符集?
- oracle 语句,有关group by 的
- ORACLE 执行效率
- 为什么使用union 或者union all的连接查询的语句中不能够使用 Order 排序? 怎么查看具体的insert into a select ... from ...的过程呢?
- 急求,sqlldr问题
- 这个表分区错在什么地方呢?
- 怎样输出一个变量
- 求一个sql语句
- 请问高手 错误吗 ora-06512 是什么意义?
- 征求oracle的sql语句中一个数字字符串求值函数例如字符串‘136138978254’求的各个数字相加的和,谢谢了
- 请教两道unix题,高人速度来啊
- 请问Oracle下多表的分组查询怎么做??
可用SELECT 票数 FOR update进行加锁....
select name,amount from tickets where name='aaa' for update;
--售票更新
update tickets set amount=amount-2 where name='aaa'
--提交释放锁
commit;
不用for update,把事务隔离级设成可串行化。
然后
select ***
update ***
两者合一起构成一事务,
这样应该不会出现脏读。
oracle的for update真是不错