I.e., the actual, concurrent, interleaved execution must produce results as if
the transactions run in isolation, one at a time.
THIS IS DIFFICULT!
- Keeping uncommitted changes hidden from concurrent transactions.
- Perfect isolation greatly restricts concurrency, which is unacceptable in practice.
- There are different isolation levels which trade
isolation for concurrency (i.e. performance).