SQLite - Transazioni

Una transazione è un'unità di lavoro eseguita su un database. Le transazioni sono unità o sequenze di lavoro eseguite in un ordine logico, sia manualmente da un utente che automaticamente da una sorta di programma di database.

Una transazione è la propagazione di una o più modifiche al database. Ad esempio, se stai creando, aggiornando o eliminando un record dalla tabella, stai eseguendo una transazione sulla tabella. È importante controllare le transazioni per garantire l'integrità dei dati e per gestire gli errori del database.

In pratica, raggrupperai molte query SQLite in un gruppo e le eseguirai tutte insieme come parte di una transazione.

Proprietà delle transazioni

Le transazioni hanno le seguenti quattro proprietà standard, di solito indicate con l'acronimo ACID.

  • Atomicity- Assicura che tutte le operazioni all'interno dell'unità di lavoro siano completate con successo; in caso contrario, la transazione viene interrotta al punto di errore e le operazioni precedenti vengono riportate al loro stato precedente.

  • Consistency - Assicura che il database modifichi correttamente gli stati in seguito a una transazione confermata con successo.

  • Isolation - Consente alle transazioni di operare in modo indipendente e trasparente l'una dall'altra.

  • Durability - Assicura che il risultato o l'effetto di una transazione confermata persista in caso di guasto del sistema.

Controllo delle transazioni

Di seguito sono riportati i seguenti comandi utilizzati per controllare le transazioni:

  • BEGIN TRANSACTION - Per avviare una transazione.

  • COMMIT - Per salvare le modifiche, in alternativa puoi usare END TRANSACTION comando.

  • ROLLBACK - Per ripristinare le modifiche.

I comandi di controllo transazionale vengono utilizzati solo con i comandi DML INSERT, UPDATE e DELETE. Non possono essere utilizzati durante la creazione di tabelle o durante la loro eliminazione perché queste operazioni vengono salvate automaticamente nel database.

Comando INIZIA TRANSAZIONE

Le transazioni possono essere avviate utilizzando BEGIN TRANSACTION o semplicemente il comando BEGIN. Tali transazioni di solito persistono fino a quando non viene rilevato il successivo comando COMMIT o ROLLBACK. Tuttavia, una transazione verrà anche ROLLBACK se il database viene chiuso o se si verifica un errore. Di seguito è riportata la semplice sintassi per avviare una transazione.

BEGIN;
or 
BEGIN TRANSACTION;

Comando COMMIT

Il comando COMMIT è il comando transazionale utilizzato per salvare le modifiche invocate da una transazione nel database.

Il comando COMMIT salva tutte le transazioni nel database dall'ultimo comando COMMIT o ROLLBACK.

Di seguito è riportata la sintassi per il comando COMMIT.

COMMIT;
or
END TRANSACTION;

Comando ROLLBACK

Il comando ROLLBACK è il comando transazionale utilizzato per annullare le transazioni che non sono già state salvate nel database.

Il comando ROLLBACK può essere utilizzato solo per annullare le transazioni dall'ultimo comando COMMIT o ROLLBACK.

Di seguito è riportata la sintassi per il comando ROLLBACK.

ROLLBACK;

Example

Considera la tabella AZIENDA con i seguenti record.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Ora, iniziamo una transazione ed eliminiamo i record dalla tabella con età = 25. Quindi, usa il comando ROLLBACK per annullare tutte le modifiche.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;

Ora, se controlli la tabella AZIENDA, ha ancora i seguenti record:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Iniziamo un'altra transazione ed eliminiamo i record dalla tabella con età = 25 e infine usiamo il comando COMMIT per eseguire il commit di tutte le modifiche.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;

Se ora controlli che la tabella AZIENDA ha ancora i seguenti record:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0