Транзакция объединяет несколько операций в одну логическую единицу: либо все выполняются, либо ни одна. Обеспечивает консистентность при сбоях и конкурентном доступе. В Go: tx, err := db.BeginTx(ctx, nil), затем Exec/Query/QueryRow, в конце tx.Commit() или tx.Rollback(). Обязательно вызывать Rollback при ошибке (через defer).
tx, _ := db.BeginTx(ctx, nil)
defer tx.Rollback()
_, err = tx.ExecContext(ctx, "INSERT ...")
if err != nil { return err }
_, err = tx.ExecContext(ctx, "UPDATE ...")
if err != nil { return err }
return tx.Commit()