The point at issue above is whether or not a command sees an absolutely consistent view of the database.
The partial transaction isolation provided by Read Committed mode is adequate for many applications, and this mode is fast and simple to use; however, it is not sufficient for all cases.
This behavior makes Read Committed mode unsuitable for commands that involve complex search conditions; however, it is just right for simpler cases.
For example, consider updating bank balances with transactions like: If two such transactions concurrently try to change the balance of account 12345, we clearly want the second transaction to start with the updated version of the account's row.
In the case of , this means it is the updated version of the row that is locked and returned to the client.
Because of the above rule, it is possible for an updating command to see an inconsistent snapshot: it can see the effects of concurrent updating commands on the same rows it is trying to update, but it does not see effects of those commands on other rows in the database.
Applications using this level must be prepared to retry transactions due to serialization failures.When you select the level Read Uncommitted you really get Read Committed, and phantom reads are not possible in the implementation of Repeatable Read, so the actual isolation level might be stricter than what you select.This is permitted by the SQL standard: the four isolation levels only define which phenomena must not happen, they do not define which phenomena must happen.The other three levels are defined in terms of phenomena, resulting from interaction between concurrent transactions, which must not occur at each level.The standard notes that due to the definition of Serializable, none of these phenomena are possible at that level.