HSQLDB - Transazioni
UN Transactionè un gruppo sequenziale di operazioni di manipolazione del database, che viene eseguito e considerato come una singola unità di lavoro. In altre parole, quando tutte le operazioni sono state eseguite con successo, solo allora l'intera transazione sarà completata. Se qualsiasi operazione all'interno della transazione fallisce, l'intera transazione fallirà.
Proprietà delle transazioni
Fondamentalmente, la transazione supporta 4 proprietà standard. Possono essere denominate proprietà ACID.
Atomicity - Tutte le operazioni nelle transazioni vengono eseguite con successo, altrimenti la transazione viene interrotta al punto di errore e le operazioni precedenti vengono riportate alla posizione precedente.
Consistency - Il database cambia correttamente gli stati su una transazione confermata con successo.
Isolation - Consente alla transazione di operare in modo indipendente e trasparente l'uno con l'altro.
Durability - Il risultato o l'effetto di una transazione confermata persiste in caso di guasto del sistema.
Commit, Rollback e Savepoint
Queste parole chiave vengono utilizzate principalmente per le transazioni HSQLDB.
Commit- La transazione andata a buon fine deve essere sempre completata eseguendo il comando COMMIT.
Rollback - Se si verifica un errore nella transazione, è necessario eseguire il comando ROLLBACK per riportare ogni tabella a cui si fa riferimento nella transazione al suo stato precedente.
Savepoint - Crea un punto all'interno del gruppo di transazioni in cui eseguire il rollback.
Esempio
Il seguente esempio spiega il concetto di transazioni insieme a commit, rollback e Savepoint. Consideriamo la tabella Clienti con le colonne id, nome, età, indirizzo e stipendio.
Id | Nome | Età | Indirizzo | Stipendio |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
Utilizzare i seguenti comandi per creare la tabella dei clienti sulla falsariga dei dati precedenti.
CREATE TABLE Customer (id INT NOT NULL, name VARCHAR(100) NOT NULL, age INT NOT
NULL, address VARCHAR(20), Salary INT, PRIMARY KEY (id));
Insert into Customer values (1, "Ramesh", 32, "Ahmedabad", 2000);
Insert into Customer values (2, "Karun", 25, "Delhi", 1500);
Insert into Customer values (3, "Kaushik", 23, "Kota", 2000);
Insert into Customer values (4, "Chaitanya", 25, "Mumbai", 6500);
Insert into Customer values (5, "Harish", 27, "Bhopal", 8500);
Insert into Customer values (6, "Kamesh", 22, "MP", 1500);
Insert into Customer values (7, "Murali", 24, "Indore", 10000);
Esempio per COMMIT
La seguente query elimina le righe dalla tabella con età = 25 e utilizza il comando COMMIT per applicare tali modifiche nel database.
DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;
Dopo l'esecuzione della query precedente, riceverai il seguente output.
2 rows effected
Dopo aver eseguito correttamente il comando precedente, controllare i record della tabella clienti eseguendo il comando indicato di seguito.
Select * from Customer;
Dopo l'esecuzione della query precedente, riceverai il seguente output.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000 |
| 3 | kaushik | 23 | Kota | 2000 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
Esempio di rollback
Consideriamo la stessa tabella Customer come input.
Id | Nome | Età | Indirizzo | Stipendio |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
Ecco la query di esempio che spiega la funzionalità di rollback eliminando i record dalla tabella con età = 25 e quindi ROLLBACK le modifiche nel database.
DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;
Dopo aver eseguito correttamente le due query precedenti, è possibile visualizzare i dati del record nella tabella Cliente utilizzando il seguente comando.
Select * from Customer;
Dopo l'esecuzione del comando precedente, riceverai il seguente output.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000 |
| 2 | Karun | 25 | Delhi | 1500 |
| 3 | Kaushik | 23 | Kota | 2000 |
| 4 | Chaitanya| 25 | Mumbai | 6500 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
La query di eliminazione elimina i dati del record dei clienti la cui età = 25. Il comando Rollback esegue il rollback di tali modifiche nella tabella Customer.
Esempio per Savepoint
Il punto di salvataggio è un punto in una transazione in cui puoi riportare la transazione a un certo punto senza ripristinare l'intera transazione.
Consideriamo la stessa tabella Customer come input.
Id | Nome | Età | Indirizzo | Stipendio |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
Consideriamo in questo esempio, si prevede di eliminare i tre diversi record dalla tabella Clienti. Si desidera creare un punto di salvataggio prima di ogni eliminazione, in modo da poter tornare a qualsiasi punto di salvataggio in qualsiasi momento per riportare i dati appropriati al loro stato originale.
Ecco la serie di operazioni.
SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;
Ora hai creato tre punti di salvataggio e cancellato tre record. In questa situazione, se si desidera ripristinare i record con ID 2 e 3, utilizzare il seguente comando Rollback.
ROLLBACK TO SP2;
Si noti che è stata eseguita solo la prima eliminazione da quando è stato eseguito il rollback a SP2. Utilizza la seguente query per visualizzare tutti i record dei clienti.
Select * from Customer;
Dopo l'esecuzione della query precedente, riceverai il seguente output.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 2 | Karun | 25 | Delhi | 1500 |
| 3 | Kaushik | 23 | Kota | 2000 |
| 4 | Chaitanya| 25 | Mumbai | 6500 |
| 5 | Harish | 27 | Bhopal | 8500 |
| 6 | Kamesh | 22 | MP | 4500 |
| 7 | Murali | 24 | Indore | 10000 |
+----+----------+-----+-----------+----------+
Rilascia Savepoint
Possiamo rilasciare il punto di salvataggio utilizzando il comando RELEASE. Di seguito è riportata la sintassi generica.
RELEASE SAVEPOINT SAVEPOINT_NAME;