Ответ
Уровни изоляции транзакций определяют степень видимости изменений, сделанных в параллельных транзакциях, и защищают от аномалий согласованности. Стандартные уровни (от наименее к наиболее строгому):
-
READ UNCOMMITTED: Самый низкий уровень.
- Разрешает: Грязные чтения (Dirty Reads), неповторяющиеся чтения, фантомные чтения.
- Транзакция видит незафиксированные изменения других транзакций.
-
READ COMMITTED: Стандартный уровень для многих СУБД (например, PostgreSQL, Oracle).
- Предотвращает: Грязные чтения.
- Разрешает: Неповторяющиеся чтения, фантомные чтения.
- Транзакция видит только зафиксированные данные на момент выполнения каждого отдельного оператора
SELECT.
-
REPEATABLE READ: Гарантирует согласованность данных в рамках одной транзакции.
- Предотвращает: Грязные чтения, неповторяющиеся чтения.
- Разрешает: Фантомные чтения (в некоторых реализациях, например, в MySQL с InnoDB, также предотвращаются).
- Снимок данных фиксируется на момент первого чтения в транзакции.
-
SERIALIZABLE: Самый строгий уровень.
- Предотвращает: Все аномалии — грязные, неповторяющиеся и фантомные чтения.
- Транзакции изолируются так, как если бы они выполнялись строго последовательно, что может приводить к блокировкам и откатам.
Компромисс: Чем выше уровень изоляции, тем выше целостность данных, но ниже параллелизм и производительность из-за блокировок.