Какую цель преследуют принципы ACID в транзакциях?

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

Ответ

Принципы ACID — это набор свойств, гарантирующих надежность и предсказуемость транзакций в системах управления базами данных (СУБД).

Принцип Описание Гарантия
Atomicity (Атомарность) Транзакция выполняется как единое целое. «Все или ничего»: либо все операции транзакции выполняются, либо ни одна.
Consistency (Согласованность) Транзакция переводит БД из одного валидного состояния в другое. Данные всегда соответствуют заданным правилам (ограничениям, триггерам).
Isolation (Изолированность) Параллельные транзакции не влияют друг на друга. Конкурентное выполнение транзакций эквивалентно их последовательному выполнению (зависит от уровня изоляции).
Durability (Долговечность) Результаты завершенной транзакции сохраняются навсегда. Изменения сохраняются даже после сбоя системы.

Практический пример (Spring @Transactional):

@Service
public class TransferService {
    @Transactional // Эта аннотация делегирует управление ACID Spring/СУБД
    public void transfer(Account from, Account to, BigDecimal amount) {
        from.debit(amount); // Списание
        // Если здесь произойдет исключение, дебет откатится
        to.credit(amount);  // Зачисление
    }
}

Без ACID возможны аномалии: потерянные обновления, «грязное» чтение, неконсистентность данных при сбоях.