Что происходит с Transaction если одна операция прошла успешно а вторая нет

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

Ответ

При использовании SQLite транзакций в Android, если одна операция в транзакции завершается успешно, а другая нет, вся транзакция откатывается автоматически (rollback). Это обеспечивает атомарность операций - либо все изменения применяются, либо ни одно.

db.beginTransaction()
try {
    // Операция 1 (успешная)
    db.insert("table1", null, values1)

    // Операция 2 (с ошибкой)
    db.insert("table2", null, values2) // Предположим, здесь исключение

    db.setTransactionSuccessful()
} catch (e: Exception) {
    // Транзакция автоматически откатится
} finally {
    db.endTransaction()
}

В этом примере ни одна из вставок не будет применена, так как транзакция не была помечена как успешная (setTransactionSuccessful() не был вызван из-за исключения).