Java 读取已提交和幻影读取(Spring)

Java 读取已提交和幻影读取(Spring),java,database,spring,transactions,isolation-level,Java,Database,Spring,Transactions,Isolation Level,如果设置了读取提交隔离级别,并且在事务中进行了幻象读取,会发生什么情况。它是回滚并重新运行还是只是回滚?不,它不会导致任何东西回滚。发生的情况是,您的代码看到的是错误的数据,并且可能会根据这些数据做出错误的决策,仅此而已。您可能会看到过时的数据(仅当在第二次读取时,该行位于具有更新列的表中)。为了避免这些导致数据损坏的事情发生,请使用乐观锁定。除非我对提交读取隔离的理解不可靠(总是有可能),然后,提交读取的全部要点是,您无法看到幻影行—由另一个事务更改的行,但更改从未提交,后来又回滚。因此,在应

如果设置了读取提交隔离级别,并且在事务中进行了幻象读取,会发生什么情况。它是回滚并重新运行还是只是回滚?

不,它不会导致任何东西回滚。发生的情况是,您的代码看到的是错误的数据,并且可能会根据这些数据做出错误的决策,仅此而已。

您可能会看到过时的数据(仅当在第二次读取时,该行位于具有更新列的表中)。为了避免这些导致数据损坏的事情发生,请使用乐观锁定。

除非我对提交读取隔离的理解不可靠(总是有可能),然后,提交读取的全部要点是,您无法看到幻影行—由另一个事务更改的行,但更改从未提交,后来又回滚。因此,在应用程序级别,通过提交读取隔离,应用程序无法看到幻影

DBMS的内部功能取决于DBMS。在MVCC系统中,事务只需读取事务启动时提交的版本。在锁定系统中,您可能会点击另一个事务的锁,然后您自己的事务可能会跳过或阻塞。但是,恕我直言,DBMS不会因为这个问题而回滚您的事务。

看到“被另一个事务更改但更改从未提交并随后回滚的行”实际上是脏读,而不是幻像读: