【发布时间】:2015-02-25 03:45:36
【问题描述】:
在理解两个事务之间的内部查询选择读取方面需要帮助
UPDATE SER_NUMBERS SET SER_NUM = SER_NUM + 1 WHERE YEAR =
(SELECT YEAR FROM (SELECT YEAR FROM SER_NUMBERS WHERE YEAR >= 1950
AND SER_NUM < 999 ORDER BY YEAR) WHERE ROWNUM =1)
每次执行查询时我都会更新 SER_NUM = SER_NUM + 1,请求非常密集,每秒可能有数千个请求。
问题是两个查询事务是否有机会从内部选择中读取相同的值并且两个事务更新相同的值?
有没有一种简单的方法可以让 Transaction-2 等待读取,直到 Transaction-1 完成更新?
正如我从 oracle 文档中看到的,默认隔离是已提交的读取
(Oracle 数据库不阻止其他事务修改 查询读取的数据,该数据可以被其他人更改 查询的两次执行之间的事务。于是,一笔交易 两次运行给定查询可以同时经历不可重复读取 和幻影。)
对实现这一目标的最佳方法有什么建议吗?
【问题讨论】:
标签: oracle oracle11g transactions isolation-level transaction-isolation