Каково назначение каждого уровня изоляции транзакций в SQL?

«Каково назначение каждого уровня изоляции транзакций в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Уровни изоляции определяют, насколько транзакции изолированы друг от друга, балансируя между согласованностью данных и производительностью.

Уровни от самого слабого к самому строгому:

Уровень Назначение Решаемые проблемы Пример SQL
READ UNCOMMITTED Максимальная производительность, минимальная согласованность. Подходит для аналитических запросов, где допустимы "грязные" данные. Не решает никаких проблем SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
READ COMMITTED Баланс между производительностью и согласованностью. По умолчанию в PostgreSQL, Oracle, SQL Server. Предотвращает грязное чтение (чтение незафиксированных данных) SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
REPEATABLE READ Гарантирует, что данные, прочитанные в транзакции, не изменятся другими транзакциями до её завершения. По умолчанию в MySQL. + Предотвращает неповторяемое чтение SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SERIALIZABLE Максимальная изоляция. Транзакции выполняются так, как если бы они шли строго последовательно. + Предотвращает фантомное чтение (появление новых строк) SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Практическое правило: Выбирайте минимально необходимый уровень изоляции. READ COMMITTED подходит для большинства OLTP-систем. SERIALIZABLE используется для критически важных финансовых операций.