Ответ
ACID — это набор свойств, гарантирующих надежное выполнение транзакций в СУБД.
- A (Atomicity) — Атомарность: Транзакция выполняется как единое целое. Либо выполняются все ее операции, либо ни одна. При сбое происходит полный откат (rollback).
- C (Consistency) — Согласованность: Транзакция переводит базу данных из одного валидного состояния в другое, соблюдая все заданные ограничения (constraints, триггеры).
- I (Isolation) — Изолированность: Параллельно выполняемые транзакции не влияют друг на друга. Уровни изоляции (Read Committed, Repeatable Read и др.) определяют степень этой изоляции.
- D (Durability) — Долговечность: После успешного завершения транзакции (commit) внесенные ею изменения сохраняются в базе данных окончательно, даже в случае сбоя системы.
Пример на JDBC:
Connection conn = dataSource.getConnection();
try {
conn.setAutoCommit(false); // Начало транзакции
PreparedStatement stmt1 = conn.prepareStatement(
"UPDATE accounts SET balance = balance - ? WHERE id = ?"
);
stmt1.setBigDecimal(1, new BigDecimal("100.00"));
stmt1.setLong(2, 1L);
stmt1.executeUpdate();
PreparedStatement stmt2 = conn.prepareStatement(
"UPDATE accounts SET balance = balance + ? WHERE id = ?"
);
stmt2.setBigDecimal(1, new BigDecimal("100.00"));
stmt2.setLong(2, 2L);
stmt2.executeUpdate();
conn.commit(); // Фиксация (Durability)
} catch (SQLException e) {
conn.rollback(); // Откат при ошибке (Atomicity)
throw e;
}