Contrasting approaches to multi-version concurrency control: Postgres handles an UPDATE by marking the old row stale and inserting a new row — older transactions keep seeing the original, newer transactions see the new, and VACUUM eventually reclaims stale rows; correct but costs space and requires maintenance. MySQL updates the row in place and keeps rollback information in a secondary segment — because most transactions commit quickly and rarely need to read the stale version, update-in-place ends up faster in practice.