有个问题在脑海里萦绕了很久,也没有找到合理的答案,不知道大家对此问题有何良策?假设某个航空售票系统,正在出售从上海到北京的机票,某日某时间某航班的机票只剩下一张,此时有A,B,C,D四个售票员同时看到了这张机票(根据数据库中的共享琐机制,这是个可能的),正巧,这个时候又来了四个旅客U1,U2,U3和U4,同时分别到了A,B,C,D四个柜台,同时要求这张机票!哈哈,没办法,事情就有那么的巧!这个时候,我的问题就来了:
1。这个时候四个售票员同时向系统发出请求,系统根据排他琐机制,会不会造成四个请求同时等待,最终导致死锁!
2。假如A把这张票卖出去了,B,C,D该如何处理他们所看到的那张票?系统会给他们提示吗?说:给票已经售出!或类似这样的话吗?
3。假如四个售票员都可以卖出这张票,但这与事实不符!系统多售出了机票!倘若不能,
为什么?不是明明看到了一张吗?
1。这个时候四个售票员同时向系统发出请求,系统根据排他琐机制,会不会造成四个请求同时等待,最终导致死锁!
2。假如A把这张票卖出去了,B,C,D该如何处理他们所看到的那张票?系统会给他们提示吗?说:给票已经售出!或类似这样的话吗?
3。假如四个售票员都可以卖出这张票,但这与事实不符!系统多售出了机票!倘若不能,
为什么?不是明明看到了一张吗?
解决方案 »
- oracle触发器如何指定几个字段发生改变后触发
- 关于 oracle for 遍历
- 更新不同主机上的ORACLE 数据库中的两张表,怎样保证在一个事务中
- 取指定数据行?
- 独占和共享启动方式中所谓的并行选件是在什么地方设置哟?
- 奇怪问题:为什么这样执行execute immediate 动态SQL不行?
- OEM不能配置,怎么办?
- ■■请问各位大侠有没有ORACLE的PROC的文档资料,那篇PDF文档的我不能转换成WORD文档呀■■
- sql如何将结果行转换为列
- 求教各位,小弟开发2年经验,想专精DBA方向,求教学习路线,和是否要考证书才能入行
- 请人帮忙送分的:Oracle中在不使用序列,不使用主键,只允许使用SQL语
- 请教:oracle9i和oracle10g能装在同一个电脑上么
--
银行会这个样子么
漏洞也太大了
肯定不会是写余额的
我们现在是重要的地方作更新的时候
会比对原纪录值
update ... where
where后面可能是表的所有字段比较
现在找到的最接近的答案是select for update 但仍没有解决问题 因为这个语句加的锁在事务结束后就会释放 而读取并显示和写回是属于两个事务 所以select for update加的锁在显示后就释放了
而在回写的时候把每个值的原值都在where中核对一下似乎有点麻烦 应该有更好的方法 期待高人给点提示。
另外,你的问题是并发问题,这个oracle都替你解决好了,完全不用担心
如果你需要在一个事务中需要数据不被修改,加个排他锁就行了