Ответ
Нет. Возможность доступа к данным другой транзакции напрямую зависит от уровня изоляции (Isolation Level).
Уровни изоляции и что они разрешают/запрещают:
| Уровень изоляции | Грязное чтение (Dirty Read) | Неповторяющееся чтение (Non-Repeatable Read) | Фантомное чтение (Phantom Read) |
|---|---|---|---|
| READ UNCOMMITTED | Разрешено | Разрешено | Разрешено |
| READ COMMITTED (часто по умолчанию) | Запрещено | Разрешено | Разрешено |
| REPEATABLE READ | Запрещено | Запрещено | Разрешено |
| SERIALIZABLE | Запрещено | Запрещено | Запрещено |
Практический пример в JDBC:
Connection conn = dataSource.getConnection();
// Установка уровня изоляции для текущего соединения
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
Ключевые моменты:
- READ UNCOMMITTED позволяет видеть незафиксированные («грязные») данные других транзакций.
- На уровнях READ COMMITTED и выше доступ к незафиксированным данным запрещен, но доступ к уже зафиксированным данным других транзакций — разрешен.
- Дополнительные ограничения могут накладывать явные блокировки (например,
SELECT ... FOR UPDATE).
Таким образом, доступ к данным другой транзакции не является абсолютно запрещенным — это настраиваемое поведение.