Introduzione alle transazioni
Una transazione è unità di lavoro, cioè una sequenza di operazioni, eseguite in modo atomico da un'applicazione su una base di dati. L'atomicità delle transazioni implica che o vengono eseguite completamente o non vengono eseguite.
Le transazioni
modificaLe transazioni sono istruzioni (o meglio un insieme di istruzioni) appartenenti al Data Manipulation Language. Una transazione è detta ben formata se è nella forma e nell'ordine:
- BEGIN TRANSACTION
- (...manipolazione dei dati...)
- COMMIT WORK oppure ROLLBACK WORK
- In questa fase non devono essere eseguite altre manipolazioni dei dati
- END TRANSACTION
Un esempio in SQL:
BEGIN TRANSACTION;
UPDATE account SET a=a-5;
UPDATE account SET b=b+5;
COMMIT WORK;
END TRANSACTION;
Quando il DBMS raggiunge l'istruzione COMMIT WORK deve assicurare che l'effetto delle istruzioni della transazione rimanga permanentemente nella base di dati. Viceversa se l'istruzione fosse ROLLBACK WORK, il DBMS deve garantire che le istruzioni non abbiano alcun effetto sui dati.
Un altro esempio più elaborato che rappresenta un bonifico (classico caso di operazione che deve essere eseguita in modo assolutamente atomico):
BEGIN TRANSACTION;
UPDATE contocorrente SET saldo=saldo+1000 WHERE idutente=3742;
UPDATE contocorrente SET saldo=saldo-1000 WHERE idutente=93811;
SELECT saldo INTO verifica WHERE idutente=3742;
IF verifica < 0 THEN
ROLLBACK WORK;
ELSE
COMMIT WORK;
END IF;
END TRANSACTION;
Autocommit
modificaAlcuni DBMS[1][2] prevedono un sistema di autocommit cioè considerano atomica ogni singola query sul database, permettendo all'utente di omettere BEGIN TRANSACTION e COMMIT per ogni istruzioni eseguita. Questo comportamento non può però essere sufficiente per strutture articolate, dove una sola query non è sufficiente allo scopo richiesto (vedi l'esempio precedente del conto corrente).
Sistema transazionale
modificaUn DBMS è detto transazionale se supporta l'esecuzione di transazioni in maniera concorrente e rispettando le proprietà ACID. Questi sistemi sono detti anche OLTP (Online Transaction Processing).
La necessità di sistemi transazionali
modificaLe transazioni sono estremamente utili quando si vuole che un sistema possa reagire ad anomalie impreviste. Queste anomalie possono essere di tipo hardware (come ad esempio guasti) oppure di tipo software (errori durante l'esecuzione di una query, crash del sistema, ecc.). I sistemi transazionali garantiscono che la base di dati rimanga consistente.
Altro motivo fondamentale dell'uso delle transazioni, è la gestione della concorrenza, che verrà approfondita nel capitolo delle proprietà ACID.