2010-11-18 63 views

回答

1

不,它不會導致任何回滾。會發生什麼情況是您的代碼會看到不好的數據,並可能基於此做出糟糕的決定,就是這樣。

0

您可能會看到陳舊的數據(僅在第二次讀取時,該行在該表中具有更新的列)。爲了避免這些讓你的數據變壞的事情發生,使用樂觀鎖定。

2

除非我對Committed Read隔離的理解不可靠(總是有可能),否則Committed Read的整個意義在於,您無法看到Phantom Rows - 由另一個事務更改的行,但從未提交併隨後將其更改背部。因此,在應用程序級別,通過Committed Read隔離,應用程序無法看到幻影。

DBMS在內部做什麼取決於DBMS。在MVCC系統中,您的交易將簡單地讀取交易開始時提交的版本。在鎖定系統中,您可能會點擊另一個事務的鎖,然後您自己可能會跳過或阻止。但是,由於問題,AFAIK,DBMS不會回滾您的事務。

+1

看到「被另一個事務改變了行但從未提交併且以後回滾的行」實際上是一個髒讀,而不是一個幻影讀:http://en.wikipedia.org/wiki/Isolation_(database_systems ) – 2011-01-15 16:56:10