Назад к вопросам
VK
Middle
4
Что такое транзакция в БД?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Транзакция в базе данных — это логически связанная последовательность операций (например, вставка, обновление, удаление), которая выполняется как единое целое. Транзакция обладает четырьмя основными свойствами (ACID):
- Атомарность (Atomicity): все операции внутри транзакции либо выполняются полностью, либо не выполняются вовсе.
- Согласованность (Consistency): транзакция переводит базу из одного корректного состояния в другое.
- Изолированность (Isolation): параллельные транзакции не влияют друг на друга, их результаты не смешиваются.
- Долговечность (Durability): после успешного завершения транзакции изменения сохраняются в базе и не теряются.
Пример в Go с использованием базы данных и транзакций:
import (
"database/sql"
_ "github.com/lib/pq" // драйвер PostgreSQL
"log"
)
func transferFunds(db *sql.DB, fromAccount, toAccount string, amount float64) error {
tx, err := db.Begin()
if err != nil {
return err
}
defer func() {
if p := recover(); p != nil {
tx.Rollback()
panic(p)
} else if err != nil {
tx.Rollback()
} else {
err = tx.Commit()
}
}()
_, err = tx.Exec("UPDATE accounts SET balance = balance - $1 WHERE id = $2", amount, fromAccount)
if err != nil {
return err
}
_, err = tx.Exec("UPDATE accounts SET balance = balance + $1 WHERE id = $2", amount, toAccount)
if err != nil {
return err
}
return err
}
Здесь операции списания и зачисления денег выполняются в рамках одной транзакции, чтобы избежать частичного обновления данных.