Уровни изоляции транзакций в Java (через JDBC) определяют, насколько сильно одна транзакция должна быть изолирована от изменений, вносимых другими одновременными транзакциями. Они контролируют, какие аномалии параллельного выполнения транзакций могут происходить.
Стандартные уровни изоляции (согласно ANSI SQL):
-
TRANSACTION_READ_UNCOMMITTED
:
- Самый низкий уровень.
- Одна транзакция может видеть незафиксированные изменения другой транзакции (грязное чтение - dirty read).
- Возможны также неповторяющееся чтение (non-repeatable read) и фантомное чтение (phantom read).
- Обеспечивает максимальную производительность за счет минимальной блокировки.
-
TRANSACTION_READ_COMMITTED
:
- Транзакция видит только зафиксированные изменения других транзакций.
- Грязное чтение невозможно.
- Возможны неповторяющееся чтение и фантомное чтение.
- Часто используется по умолчанию.
-
TRANSACTION_REPEATABLE_READ
:
- Транзакция видит только зафиксированные изменения до ее начала. При повторном чтении тех же данных в рамках одной транзакции будут получены те же значения.
- Грязное чтение и неповторяющееся чтение невозможны.
- Возможно фантомное чтение (вставка новой строки, видимой при повторном запросе с предикатом).
-
TRANSACTION_SERIALIZABLE
:
Уровни изоляции транзакций в Java (через JDBC) определяют, насколько сильно одна транзакция должна быть изолирована от изменений, вносимых другими одновременными транзакциями. Они контролируют, какие аномалии параллельного выполнения транзакций могут происходить.
Стандартные уровни изоляции (согласно ANSI SQL):
-
TRANSACTION_READ_UNCOMMITTED
:
- Самый низкий уровень.
- Одна транзакция может видеть незафиксированные изменения другой транзакции (грязное чтение - dirty read).
- Возможны также неповторяющееся чтение (non-repeatable read) и фантомное чтение (phantom read).
- Обеспечивает максимальную производительность за счет минимальной блокировки.
-
TRANSACTION_READ_COMMITTED
:
- Транзакция видит только зафиксированные изменения других транзакций.
- Грязное чтение невозможно.
- Возможны неповторяющееся чтение и фантомное чтение.
- Часто используется по умолчанию.
-
TRANSACTION_REPEATABLE_READ
:
- Транзакция видит только зафиксированные изменения до ее начала. При повторном чтении тех же данных в рамках одной транзакции будут получены те же значения.
- Грязное чтение и неповторяющееся чтение невозможны.
- Возможно фантомное чтение (вставка новой строки, видимой при повторном запросе с предикатом).
-
TRANSACTION_SERIALIZABLE
: