English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Transazione di SQLite

Una transazione è un'unità di lavoro eseguita sul database. Una transazione è un'unità o un'ordine di lavoro eseguita in sequenza logica, indipendentemente dal fatto che venga completata manualmente dall'utente o automaticamente da un qualche programma di database.

Una transazione è il propagarsi di una o più modifiche nel database. Ad esempio, se si desidera creare, aggiornare o eliminare record in una tabella, si eseguirà una transazione sulla tabella. È importante controllare le transazioni per garantire l'integrità dei dati e gestire gli errori del database.

In realtà, organizzerete molte query SQLite in un gruppo e le eseguirete insieme come parte di una transazione.

Proprietà delle transazioni

Le transazioni hanno le seguenti quattro proprietà standard, rappresentate solitamente con l'acronimo ACID.

  • Atomicità (Atomicity):Assicura che tutte le operazioni all'interno di un'unità di lavoro siano completate con successo. In caso di guasto, la transazione verrà interrotta e le operazioni precedenti verranno annullate al loro stato precedente.

  • Coerenza (Consistency):Assicura che il database cambi lo stato correttamente sui trasazioni confermate con successo.

  • Isolamento (Isolation):Rende le operazioni delle transazioni indipendenti e trasparenti.

  • Durabilità (Durability):Assicurarsi che i risultati o gli effetti delle transazioni confermate siano ancora presenti nel caso di un guasto del sistema.

Controllo delle transazioni

Ecco i comandi utilizzati per controllare le transazioni:

  • BEGIN TRANSACTION −Iniziare una transazione.

  • COMMIT−Per salvare le modifiche, è possibile anche utilizzareEND TRANSACTIONcomando.

  • ROLLBACK −Annullare le modifiche.

I comandi di controllo delle transazioni si utilizzano solo con i comandi DML INSERT, UPDATE e DELETE. Non possono essere utilizzati durante la creazione o la cancellazione di tabelle, poiché queste operazioni vengono automaticamente confermate nel database.

Comando BEGIN TRANSACTION

È possibile avviare una transazione utilizzando BEGIN TRANSACTION o semplicemente BEGIN comando. Questo tipo di transazione di solito continua fino a quando non si incontra il comando COMMIT o ROLLBACK successivo. Tuttavia, se il database viene chiuso o si verifica un errore, la transazione verrà anche annullata. Ecco un esempio di sintassi per avviare una transazione.

INIZIO;
o 
INIZIO TRANSAZIONE;

Comando COMMIT

Il comando COMMIT è un comando transazionale utilizzato per salvare le modifiche chiamate dalla transazione nel database.

Dalla scorsa esecuzione di un comando COMMIT o ROLLBACK, il comando COMMIT salverà tutte le transazioni nel database.

Ecco la sintassi del comando COMMIT.

COMMIT;
o
FINE TRANSAZIONE;

Comando ROLLBACK

Il comando ROLLBACK è un comando transazionale utilizzato per annullare le transazioni non salvate nel database.

Dalla scorsa esecuzione di un comando COMMIT o ROLLBACK, il comando ROLLBACK può essere utilizzato solo per annullare la transazione.

Ecco la sintassi del comando ROLLBACK.

ROLLBACK;

Esempio online

La tabella COMPANY 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 e eliminiamo i record dalla tabella con age = 25. Poi, usiamo il comando ROLLBACK per annullare tutte le modifiche.

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

Ora, se controllate la tabella COMPANY, essa continua ad avere 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, eliminiamo i record dalla tabella con AGE = 25 e infine usiamo il comando COMMIT per confermare tutte le modifiche.

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

Se verifica ora la tabella COMPANY, essa continua ad avere 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