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