The answer to the first question is yes. No DBMS can support dirty recording; if two transactions T1 and T2 are simultaneously running, and T2 overwrites the update from T1, then the system cannot handle the case when T1 subsequently issues ROLLBACK, since the update of T2 has already occurred.
To avoid dirty recording, the initial definition of snapshot isolation was the “first gain from the commit” —that is, conflicting records could be resolved, but only the first transaction to issue COMMIT could — all other conflicting transactions would have to ROLLBACK. But this programming model is somewhat problematic, if not wasteful, because a transaction can update a significant part of the database just to give up COMMIT at the end. Thus, instead of the “first committer winning”, most DBMS systems that support MVCC implement the “first update winner” using a fairly traditional two-phase lock.
source share