If someone is reading from a database at the same time as someone else is writing to it, it is possible that the reader will see a half-written or inconsistent piece of data. Consider banking transaction where bank customer has initiated two deposit transactions(INR 2000 and INR 3000) and current balance is 10K. After both transactions, balance should be 15K. But if half-written data is read, then it can be anything (12000/13000) based on race condition. We need mechanism to avoid race. MVCC solves this problem in efficient manner.
The simplest way is to make all readers wait until the writer is done, which is known as a lock. This can be very slow, so MVCC takes a different approach: each user connected to the database sees a snapshot of the database at a particular instant in time. Any changes made by a writer will not be seen by other users of the database until the changes have been completed (or, in database terms: until the transaction has been committed.)
https://en.wikipedia.org/wiki/Multiversion_concurrency_control