In order to provide serializable isolation, the database must detect situations in which a transaction may have acted on an outdated premise and abort the transaction in that case. How does the database know if a query result might have changed? There are two cases to consider: Detecting reads of a stale MVCC object version (uncommitted write occurred before the read) Detecting writes that affect prior reads (the write occurs after the read)