Грязное чтение (dirty read). Транзакция A изменила баланс, но не закоммитила. Транзакция B прочитала новое значение и приняла решение. A откатилась — B действовала по данным, которых никогда не было. Запрещено начиная с READ COMMITTED.
Неповторяемое чтение (non-repeatable read). B читает строку, A меняет её и коммитит, B читает ту же строку снова — значение другое. Проблема для транзакций, которые читают данные несколько раз и рассчитывают на их неизменность (отчёт, проверка с последующим действием). Запрещено начиная с REPEATABLE READ.
Фантом (phantom read). B выполняет SELECT ... WHERE status = 'new', A вставляет новую строку с этим статусом и коммитит, B повторяет запрос — строк стало больше. Отличие от неповторяемого чтения: меняется не значение существующей строки, а сам набор. По стандарту запрещено только на SERIALIZABLE (в PostgreSQL снимок скрывает фантомы и на REPEATABLE READ).
Цена изоляции: чем выше уровень, тем больше блокировок или откатов из-за конфликтов сериализации. Поэтому выбирают минимально достаточный уровень и защищают критичные места явно (FOR UPDATE, атомарные UPDATE).