需要帮助理解两个事务之间的内部查询选择读取
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 数据库不会阻止其他事务修改查询读取的数据,该数据可以在两次查询执行之间被其他事务更改。因此,运行给定查询两次的事务可能会遇到不可重复读取和幻像。 )
关于实现这一目标的最佳方法的任何建议?