Isolation levels let a database trade strictness against speed. Perfect isolation - making concurrent transactions behave exactly as if they ran one at a time - is expensive, so the SQL standard defines a ladder of weaker levels that allow more concurrency in exchange for permitting certain anomalies. The four named levels, from weakest to strongest, are read uncommitted, read committed, repeatable read, and serializable.
The standard distinguishes the levels by which anomalies, or phenomena, they allow. A dirty read is seeing another transaction’s uncommitted changes; a non-repeatable read is getting a different value when re-reading the same row; a phantom is a re-run query returning a different set of rows because another transaction inserted or deleted some. Read uncommitted permits all of these, read committed forbids dirty reads, repeatable read also forbids non-repeatable reads, and serializable forbids phantoms as well, leaving no anomalies.
The classic critique of this scheme is the 1995 SIGMOD paper “A Critique of ANSI SQL Isolation Levels” by Hal Berenson, Phil Bernstein, Jim Gray, Jim Melton, Elizabeth O’Neil, and Patrick O’Neil. The authors show that the ANSI phenomena are stated ambiguously and fail to characterize common locking implementations and other isolation types; they give more precise definitions, introduce additional phenomena, and define an important multiversion type called Snapshot Isolation.
In practice, choosing an isolation level is a tuning decision. Most applications run at read committed or repeatable read because serializable can be slow, accepting that some anomalies are possible in exchange for higher throughput. Understanding exactly which anomalies a level allows is what lets developers reason about whether their transactions are correct under concurrency.