Ответ
Изоляция (Isolation) определяет, насколько операции одной транзакции видны другим транзакциям. Уровни изоляции помогают избегать проблем параллельного доступа:
- Read Uncommitted – транзакции видят даже незафиксированные изменения других транзакций (грязное чтение).
- Read Committed – видны только завершённые изменения (избегаем грязного чтения).
- Repeatable Read – гарантирует, что повторное чтение в одной транзакции даст те же данные (избегаем неповторяемого чтения).
- Serializable – полная изоляция, транзакции выполняются последовательно (избегаем фантомного чтения).
// Пример в Room
@Dao
interface UserDao {
@Transaction
@Query("SELECT * FROM User")
suspend fun getUsers(): List<User> // По умолчанию Room использует уровень изоляции SQLite
}
SQLite поддерживает SERIALIZABLE (по умолчанию) и READ UNCOMMITTED (через PRAGMA). Room не позволяет явно менять уровень изоляции, но можно использовать SupportSQLiteDatabase для ручного управления.