读取已提交和幻读(Spring)

时间:2010-11-18 13:48:38

标签: java database spring transactions isolation-level

当我设置了Read Committed隔离级别并在我的事务中进行了一个幻像读取时会发生什么。它是否会被回滚并重新运行或只是回滚?

3 个答案:

答案 0 :(得分:2)

除非我对Committed Read隔离的理解是不可能的(总是有可能),所以Committed Read的全部内容是你看不到Phantom Rows - 被另一个事务更改的行但是这个更改从未提交过,后来又回滚了。因此,在应用程序级别,使用Committed Read隔离,应用程序无法看到幻像。

DBMS在内部的作用取决于DBMS。在MVCC系统中,您的交易将只读取交易开始时提交的版本。在锁定系统中,您可能会遇到另一个事务的锁定,然后您自己可能会跳过或阻止。但是,AFAIK,DBMS不会因为问题而回滚您的事务。

答案 1 :(得分:1)

不,它不会导致任何回滚。发生的事情是你的代码看到了糟糕的数据,并且可能根据这些做出错误的决定,就是这样。

答案 2 :(得分:0)

您可能会看到过时的数据(仅在第二次读取时,该行位于该表中,并且包含更新的列)。为了避免这些事情使您的数据变坏,请使用乐观锁定。