Ответ
ACID-гарантии:
- Атомарность – транзакция выполняется полностью или не выполняется вовсе.
- Согласованность – данные всегда в валидном состоянии (соблюдаются constraints, триггеры).
- Изолированность – параллельные транзакции не влияют друг на друга (уровни изоляции: Read Uncommitted, Read Committed, Repeatable Read, Serializable).
- Долговечность – после commit изменения сохраняются даже при сбое.
Пример в Go с sql.Tx:
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
defer tx.Rollback() // Откат при ошибке
_, err = tx.Exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1")
if err != nil {
return err
}
_, err = tx.Exec("UPDATE accounts SET balance = balance + 100 WHERE id = 2")
if err != nil {
return err
}
err = tx.Commit() // Фиксация изменений