【问题标题】:How to keep self-joing from data inconsistence?如何防止自连接数据不一致?
【发布时间】:2021-11-05 22:17:53
【问题描述】:

在可重复读取中,我们可以保证从同一条记录中检索到相同的值,即使该记录被多次查询。但是,在定义视图时不允许设置隔离级别。目前,我正在尝试创建一个视图和 SQL 语句,如下所示SELECT * FROM TBL t1 INNER JOIN TBL t2 ON t1.SEQ = t2.SEQ + 1

如您所见,我在一个会话中查询了一个表两次。这个查询可以很快,但我不能保证这两个查询之间这个表没有任何变化。如何在这种自联接中保持数据一致性?

【问题讨论】:

    标签: sql oracle transactions self-join isolation-level


    【解决方案1】:

    Oracle 会自动执行此操作。

    来自documentation

    语句级读取一致性

    Oracle 数据库始终强制执行语句级别的读取一致性,这保证了单个查询返回的数据在单个时间点被提交并保持一致。

    单个 SQL 语句一致的时间点取决于事务隔离级别和查询的性质:

    • 在读提交隔离级别中,该点是语句打开的时间。例如,如果SELECT 语句在 SCN 1000 处打开,则此语句与 SCN 1000 一致。
    • 在可序列化或只读事务中,这一点是事务开始的时间。例如,如果一个事务从 SCN 1000 开始,并且如果该事务中出现多个 SELECT 语句,则每个语句都与 SCN 1000 一致。
    • 在闪回查询操作 (SELECT ... AS OF) 中,SELECT 语句明确指定时间点。例如,您可以查询上周四下午 2 点出现的表格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-13
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      相关资源
      最近更新 更多