Sobes.tech
Back to questions
Middle+
2

Что такое транзакция в базе данных?

Companies where asked
Magnit Tech

Answer from AI

sobes.tech AI

Транзакция в базе данных — это последовательность операций, которая выполняется как единое целое. Основная идея транзакции — обеспечить целостность данных, даже если происходит сбой или ошибка.

Транзакция обладает четырьмя свойствами (ACID):

  • Атомарность (Atomicity): все операции внутри транзакции либо выполняются полностью, либо не выполняются вовсе.
  • Согласованность (Consistency): транзакция переводит базу данных из одного корректного состояния в другое.
  • Изолированность (Isolation): параллельные транзакции не влияют друг на друга.
  • Долговечность (Durability): после фиксации транзакции её изменения сохраняются даже при сбоях.

В Go для работы с транзакциями часто используется пакет database/sql. Пример использования транзакции:

import (
    "database/sql"
    _ "github.com/lib/pq" // драйвер PostgreSQL
)

func transferFunds(db *sql.DB, fromAccount, toAccount string, amount float64) error {
    tx, err := db.Begin()
    if err != nil {
        return err
    }
    defer tx.Rollback() // откат, если не будет вызван 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 tx.Commit()
}

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