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