PostgreSQL - 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 un record, aggiornando un record o eliminando un record dalla tabella, allora stai eseguendo la 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 PostgreSQL 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
I seguenti comandi vengono 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 solo 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.
Il comando BEGIN TRANSACTION
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. Ma una transazione verrà anche ROLLBACK se il database viene chiuso o se si verifica un errore.
Quanto segue è la semplice sintassi per avviare una transazione:
BEGIN;
or
BEGIN TRANSACTION;
Il 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.
La sintassi per il comando COMMIT è la seguente:
COMMIT;
or
END TRANSACTION;
Il 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.
La sintassi per il comando ROLLBACK è la seguente:
ROLLBACK;
Esempio
Considera che la tabella AZIENDA contiene i seguenti record:
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
Ora, iniziamo una transazione ed eliminiamo i record dalla tabella con età = 25 e infine usiamo il comando ROLLBACK per annullare tutte le modifiche.
testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;
Se controllerai che la tabella AZIENDA abbia ancora i seguenti record:
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
Ora, 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.
testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;
Se controlli la tabella AZIENDA, ha ancora i seguenti record:
id | name | age | address | salary
----+-------+-----+------------+--------
1 | Paul | 32 | California | 20000
3 | Teddy | 23 | Norway | 20000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
(5 rows)