Вопрос проверяет понимание компромиссов уровня изоляции Read Committed и аномалий, которые он допускает
Read Committed запрещает грязные чтения.
При этом он допускает неповторяемые чтения и фантомы.
Данные могут измениться между двумя запросами в одной транзакции.
Это нормальное и ожидаемое поведение для данного уровня.
Он часто используется как баланс между изоляцией и производительностью.
Уровень Read Committed является самым распространённым уровнем изоляции в большинстве СУБД.
Read CommittedОпределение:Read Committed гарантирует, что транзакция читает только зафиксированные данные.
Это означает:
Грязные чтения невозможны.
Каждое чтение видит актуальное зафиксированное состояние на момент выполнения запроса.
Перед перечислением важно понимать, что изоляция действует на уровень запроса, а не всей транзакции.
Сценарий:
Транзакция A читает строку.
Транзакция B изменяет и фиксирует эту строку.
Транзакция A читает строку повторно и видит новое значение.
Сценарий:
Транзакция A выполняет SELECT с условием.
Транзакция B вставляет новые строки и фиксируется.
Повторный SELECT возвращает другой набор строк.
Такое поведение:
Упрощает реализацию.
Повышает параллелизм.
Уменьшает блокировки.
Read Committed защищает от грязных чтений, но допускает неповторяемые и фантомные чтения как плату за производительность.