Sobes.tech
Back to questions
Middle
3

Что такое транзакция в БД?

Companies where asked
VKVK

Answer from AI

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
}

Здесь операции списания и зачисления денег выполняются в рамках одной транзакции, чтобы избежать частичного обновления данных.