我试着把它放在一个句子中,但最好举一个例子:
SELECT * FROM someTable WHERE id = someID;
returns no rows
...
some time passes (no inserts are done to the table and no ID updates)
...
SELECT * FROM someTable WHERE id = someID;
returns one row!
某些DB机制是否可能阻止第一个SELECT返回行?
Oracle日志没有错误。
执行两个选择时,不会回滚任何事务。
答案 0 :(得分:1)
您无法在其他会话中看到未提交的数据。什么时候提交?
EDIT1:你是唯一一个使用这个数据库的人吗?或者你有多个会话吗?
我认为在另一个会话中,您或其他人已插入此行,您执行选择,但您看不到此行。之后,在另一个会话中发生提交(可能是隐式的,因为会话已关闭)然后再次选择时会看到此行。
我可以想到其他解释,但我首先想知道你是否只使用这个数据库。
答案 1 :(得分:0)
使用Oracle提供的读取一致性,您不应该看到这样的行。如果您使用自动提交在某种模式下运行,那么每个语句都是一个自包含的事务,则不会违反读取一致性。您使用哪个程序来访问数据库?我同意其他意见;如果您的会话未插入该行,并且同时没有其他会话处于活动状态,则不应出现该行。我不知道DBMS会沉迷于自发的数据生成。
答案 2 :(得分:0)
你在甲骨文中没有scheduled jobs吗?