Что такое уровень изоляции транзакций Read Committed?

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

Ответ

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-приложений
  • Когда допустимы незначительные расхождения в данных
  • Для баланса между согласованностью и производительностью