Transazione atomica
# Transazione atomica

Unoperazione atomica, in informatica, consiste in un'operazione di esecuzione indivisibile dal punto di vista logico.

In generale, un'operazione si dice atomica se è indivisibile, ovvero se nessun'altra operazione può cominciare prima che la prima sia finita, e quindi non può esserci interleaving. Il risultato di quella operazione è sempre lo stesso se parte dalle stesse condizioni iniziali.

## Esecuzione atomica nelle basi di dati

Le operazioni atomiche sono tipiche dei DBMS e la proprietà di atomicità è infatti la prima delle proprietà ACID delle basi di dati.

Una simile caratteristica esiste per permettere la corretta esecuzione di operazioni concorrenti o correlate ed è garantita dal DBMS che, quando trasforma le operazioni richieste in un linguaggio di alto livello in operazioni elementari di basso livello, le raggruppa in transazioni atomiche.

Una transazione atomica è costituita dal seguente schema:

* Start transaction
* Operazioni da eseguire
* Direttive commit o roll back ossia di convalida o di disfacimento dell'intera transazione.
* End transaction

In pratica si eseguono i vari punti che compongono la transazione e successivamente si verifica se si è verificato qualche errore o conflitto. Se la transazione è andata a buon fine la si rende effettiva (commit) altrimenti la si annulla nella sua totalità riportando il sistema, operazione per operazione, allo stato iniziale (rollback).

### Esempio

Per meglio comprendere l'utilità di una transazione atomica occorre procedere con un esempio esterno alle basi di dati.

Si immagini un'operazione bancaria effettuata su una base di dati dove un soggetto A deve versare dei soldi sul conto corrente di un altro soggetto B e chiamiamola versamento.

Un'operazione del genere consisterebbe in:

* Scalare i soldi dal conto corrente del soggetto A;
* Accreditarli sul conto corrente del soggetto B;

Ora immaginiamo che il conto corrente di B non dovesse esistere e che quindi durante l'esecuzione della sotto-operazione 2 dell'operazione di versamento si dovesse verificare un errore.

Quello che accadrebbe è che:

* Con una transazione di versamento atomica verrebbe eseguito il rollback sia di 2 che di 1 e quindi i soldi scalati dal conto corrente del soggetto A verrebbero riaccreditati.
* Con una transazione di versamento non atomica, dopo l'errore durante l'esecuzione di 2 non sarebbe più possibile annullare l'operazione 1 che sarebbe oramai stata eseguita con conseguente perdita del denaro di A.

Quindi, in sintesi, la proprietà di atomicità, quando c'è, garantisce la corretta esecuzione di operazioni multiple ma logicamente correlate perché le riferisce ad un'operazione unica ed indivisibile.

Il problema mostrato non si verificherebbe direttamente implementando l'operazione di versamento in un linguaggio di alto livello quale SQL ma si verificherebbe durante la sua effettiva esecuzione da parte del DBMS che la scomporrebbe in molte sotto-operazioni elementari passibili di errore o conflitto con altri comandi.

