Transazioni ODBC

Una transazione è un'unità di lavoro eseguita come singola operazione atomica, ovvero l'operazione ha esito positivo o negativo nel suo complesso. Si consideri ad esempio il trasferimento di denaro da un conto bancario a un altro. Ciò comporta due passaggi: prelievo del denaro dal primo conto e deposito nel secondo. È importante che entrambi i passaggi abbiano esito positivo; non è accettabile che un passaggio abbia esito positivo e l'altro non vada a buon fine. Un database che supporta le transazioni è in grado di garantire ciò.

Le transazioni possono essere completate eseguendo il commit o il rollback. Quando viene eseguito il commit di una transazione, le modifiche apportate in tale transazione vengono rese permanenti. Quando viene eseguito il rollback di una transazione, le righe interessate vengono restituite allo stato in cui si trovavano prima dell'avvio della transazione. Per entrare nel dettaglio nell'esempio del trasferimento di conto, un'applicazione esegue un'istruzione SQL per effettuare un addebito sul primo conto e un'istruzione SQL diversa per effettuare l’accredito sul secondo conto. Se entrambe le istruzioni hanno esito positivo, l'applicazione esegue il commit della transazione. Tuttavia, se una delle istruzioni ha esito negativo per qualsiasi motivo, l'applicazione esegue il rollback della transazione. In entrambi i casi, l'applicazione garantisce uno stato coerente alla fine della transazione.

Una transazione singola può includere più operazioni di database che si verificano in momenti diversi. Se altre transazioni avessero accesso completo ai risultati intermedi, le transazioni potrebbero interferire tra loro. Si supponga, ad esempio, che una transazione inserisca una riga, una seconda transazione legga tale riga e che venga eseguito il rollback della prima transazione. Ora la seconda transazione include dati per una riga che non esiste.

Per risolvere questo problema, esistono vari schemi per isolare le transazioni l'una dall'altra. L'isolamento delle transazioni viene in genere implementato bloccando le righe, impedendo a più transazioni di usare contemporaneamente la stessa riga. In alcuni database, il blocco di una riga può anche bloccare altre righe.

All’aumento dell’isolamento delle transazioni corrisponde una riduzione della concorrenza, ovvero la capacità di due transazioni di usare contemporaneamente gli stessi dati. Per altre informazioni, vedere Impostare il livello di isolamento della transazione.

Questa sezione descrive gli argomenti seguenti: