T-SQL - Transazioni

UN transactionè un'unità di lavoro che viene 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 si crea un record o si aggiorna un record o si elimina un record dalla tabella, si sta 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 SQL 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 allo stato precedente.

  • Consistency - Assicura che il database cambi correttamente lo stato su 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

Ci sono i seguenti comandi usati per controllare le transazioni:

  • COMMIT - Per salvare le modifiche.

  • ROLLBACK - Per ripristinare le modifiche.

  • SAVEPOINT - Crea punti all'interno di gruppi di transazioni in cui eseguire il ROLLBACK.

  • SET TRANSACTION - Inserisce un nome su una transazione.

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.

Per poter utilizzare i comandi di controllo transazionale in MS SQL Server, dobbiamo iniziare la transazione con "begin tran" o iniziare il comando di transazione altrimenti questi comandi non funzioneranno.

Comando COMMIT

Il comando COMMIT è il comando transazionale utilizzato per salvare le modifiche invocate da una transazione nel database. Questo comando salva tutte le transazioni nel database dall'ultimo comando COMMIT o ROLLBACK.

Sintassi

Di seguito è riportata la sintassi per il comando COMMIT.

COMMIT;

Esempio

Considera la tabella CLIENTI con i seguenti record.

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

L'esempio di comando seguente eliminerà i record dalla tabella con età = 25 e quindi COMMIT le modifiche nel database.

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT

Di conseguenza, due righe della tabella verranno eliminate e l'istruzione SELECT produrrà il seguente output.

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00
3   kaushik    23        Kota              2000.00
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00

Comando ROLLBACK

Il comando ROLLBACK è il comando transazionale utilizzato per annullare le transazioni che non sono già state salvate nel database. Questo comando può essere utilizzato solo per annullare le transazioni dall'ultimo comando COMMIT o ROLLBACK.

Sintassi

Di seguito è riportata la sintassi per il comando ROLLBACK.

ROLLBACK

Esempio

Considera la tabella CLIENTI con i seguenti record.

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00

L'esempio di comando seguente eliminerà i record dalla tabella con età = 25 e quindi ROLLBACK le modifiche nel database.

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
ROLLBACK

Di conseguenza, l'operazione di eliminazione non avrà alcun impatto sulla tabella e l'istruzione SELECT produrrà il risultato seguente.

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

Comando SAVEPOINT

SAVEPOINT è un punto in una transazione in cui è possibile riportare la transazione a un certo punto senza ripristinare l'intera transazione.

Sintassi

Di seguito è riportata la sintassi per il comando SAVEPOINT.

SAVE TRANSACTION SAVEPOINT_NAME

Questo comando serve solo nella creazione di un SAVEPOINT tra le istruzioni transazionali. Il comando ROLLBACK viene utilizzato per annullare un gruppo di transazioni.

La seguente è la sintassi per tornare a un SAVEPOINT.

ROLLBACK TO SAVEPOINT_NAME

Nel seguente esempio, elimineremo tre diversi record dalla tabella CUSTOMERS. Dovremo creare un SAVEPOINT prima di ogni eliminazione, in modo da poter eseguire il ROLLBACK di qualsiasi SAVEPOINT in qualsiasi momento per riportare i dati appropriati al loro stato originale.

Esempio

Considera la tabella CLIENTI con i seguenti record:

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

Di seguito sono riportate le serie di operazioni:

Begin Tran 
SAVE Transaction SP1 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 1  
1 row deleted. 
SAVE Transaction SP2 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 2 
1 row deleted.
SAVE Transaction SP3 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 3 
1 row deleted.

Le tre eliminazioni sono avvenute, tuttavia, abbiamo cambiato idea e abbiamo deciso di ROLLBACK al SAVEPOINT che abbiamo identificato come SP2. Poiché SP2 è stato creato dopo la prima eliminazione, le ultime due eliminazioni vengono annullate:

ROLLBACK Transaction SP2 
Rollback complete.

Si noti che è stata eseguita solo la prima eliminazione da quando è stato eseguito il rollback a SP2.

SELECT * FROM CUSTOMERS

6 righe selezionate.

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Delhi        1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00

Comando SET TRANSACTION

Il comando SET TRANSACTION può essere utilizzato per avviare una transazione di database. Questo comando viene utilizzato per specificare le caratteristiche per la transazione che segue.

Sintassi

Di seguito è riportata la sintassi per SET TRANSACTION.

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>