Каким образом обеспечивается атомарность в Transaction

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

Ответ

В Android атомарность транзакций обеспечивается через SQLiteDatabase с помощью методов beginTransaction(), setTransactionSuccessful() и endTransaction().

val db = writableDatabase
db.beginTransaction()
try {
    // Операции с БД
    db.insert("table", null, values)
    db.update("table", values, whereClause, null)
    db.setTransactionSuccessful() // Подтверждаем успешность
} catch (e: Exception) {
    // В случае ошибки транзакция откатится
} finally {
    db.endTransaction() // Завершаем транзакцию
}

Ключевые моменты:

  1. Все операции между beginTransaction() и endTransaction() выполняются как единое целое
  2. Если не вызвать setTransactionSuccessful(), изменения автоматически откатятся
  3. В случае исключения транзакция также откатывается
  4. Гарантируется, что другие потоки не увидят промежуточных состояний БД