Ответ
Read Committed — уровень изоляции транзакций, который гарантирует, что транзакция видит только зафиксированные данные других транзакций.
Гарантии: ✅ Защита от "грязного" чтения (Dirty Read) — нельзя прочитать незафиксированные изменения ❌ Нет защиты от неповторяемого чтения (Non-repeatable Read) ❌ Нет защиты от фантомного чтения (Phantom Read)
Пример проблемы с неповторяемым чтением:
-- Транзакция 1
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT balance FROM accounts WHERE id = 1; -- Возвращает 100
-- Транзакция 2 (параллельно)
UPDATE accounts SET balance = 200 WHERE id = 1;
COMMIT;
-- Транзакция 1 (продолжение)
SELECT balance FROM accounts WHERE id = 1; -- Теперь возвращает 200!
COMMIT;
Особенности в разных СУБД:
- PostgreSQL: уровень по умолчанию, использует MVCC
- Oracle: уровень по умолчанию, использует откаты (undo segments)
- SQL Server: требует блокировок для предотвращения грязного чтения
Установка в JDBC:
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
Когда использовать:
- Большинство OLTP-приложений
- Когда допустимы незначительные расхождения в данных
- Для баланса между согласованностью и производительностью