Какой уровень изоляции транзакций используется по умолчанию в JDBC?

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

Ответ

В JDBC по умолчанию используется уровень изоляции TRANSACTION_READ_COMMITTED.

Что это означает:

  • Гарантирует, что транзакция видит только зафиксированные изменения других транзакций.
  • Предотвращает "грязное чтение" (dirty reads).
  • Допускает "неповторяемое чтение" (non-repeatable reads) и "фантомное чтение" (phantom reads).

Пример проверки и изменения уровня:

Connection conn = DriverManager.getConnection(url, user, pass);

// Получить текущий уровень изоляции
int defaultIsolation = conn.getTransactionIsolation();
// Вернет Connection.TRANSACTION_READ_COMMITTED

// Установить другой уровень, например, SERIALIZABLE
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

Важно: Фактическая поддержка уровней и их семантика зависят от конкретной СУБД (PostgreSQL, MySQL, Oracle).