Transazioni (accesso ai dati MFC)
Il concetto di transazione è stato sviluppato per gestire i casi in cui lo stato risultante del database dipende dalla corretta esecuzione globale di una serie di operazioni, ad esempio quando operazioni successive potrebbero modificare i risultati di operazioni precedenti. In tali casi, se un'operazione non riesce, lo stato risultante potrebbe essere indeterminato.
Per risolvere questo problema, è possibile raggruppare in una transazione una serie di operazioni in modo da garantire l'integrità del risultato finale. Per la riuscita dell'intera transazione, tutte le operazioni devono avere esito positivo ed è necessario che ne venga eseguito il commit, ovvero che vengano scritte nel database, altrimenti l'intera transazione avrà esito negativo. L'annullamento della transazione viene definito rollback. Il rollback consente di ripristinare i dati come erano prima delle modifiche e di riportare il database allo stato precedente la transazione.
Ad esempio, in una transazione bancaria automatica, se si trasferisce del denaro dal conto A al conto B, sia il prelievo da A che il deposito in B dovranno essere completati correttamente, altrimenti l'intera transazione dovrà avere esito negativo.
Una transazione deve avere le proprietà ACID, ovvero:
Atomicità Una transazione è un'unità atomica di lavoro e viene eseguita una sola volta, ovvero tutte le operazioni vengono eseguite o nessuna di queste operazioni.
Coerenza Una transazione mantiene la coerenza dei dati, trasformando uno stato coerente dei dati in un altro stato coerente dei dati. I dati associati da una transazione devono mantenere la stessa semantica.
Isolamento Una transazione è un'unità di isolamento e ognuna si verifica separatamente e indipendentemente da transazioni simultanee. È importante che una transazione non sia mai interessata dalle fasi intermedie di un'altra transazione.
Durabilità Una transazione è un'unità di recupero. Se una transazione riesce, gli aggiornamenti vengono mantenuti anche se il sistema si arresta in modo anomalo o viene chiuso. Se una transazione non riesce, il sistema rimane nello stato precedente al commit della transazione.
È possibile supportare le transazioni in OLE DB (vedere Supporto delle transazioni in OLE DB) o ODBC (vedere Transazione (ODBC)).
Una transazione distribuita è una transazione che aggiorna i dati distribuiti, ovvero dati presenti in più sistemi collegati in rete. Se si desidera supportare le transazioni in un sistema distribuito, è consigliabile usare ADO.NET anziché il supporto delle transazioni OLE DB.