T-SQL - Transactions

UNE transactionest une unité de travail effectuée sur une base de données. Les transactions sont des unités ou des séquences de travail accomplies dans un ordre logique, que ce soit de manière manuelle par un utilisateur ou automatiquement par une sorte de programme de base de données.

Une transaction est la propagation d'une ou plusieurs modifications dans la base de données. Par exemple, si vous créez un enregistrement, mettez à jour un enregistrement ou supprimez un enregistrement de la table, vous effectuez une transaction sur la table. Il est important de contrôler les transactions pour garantir l'intégrité des données et gérer les erreurs de base de données.

En pratique, vous regrouperez de nombreuses requêtes SQL dans un groupe et vous les exécuterez toutes ensemble dans le cadre d'une transaction.

Propriétés des transactions

Les transactions ont les quatre propriétés standard suivantes, généralement désignées par l'acronyme ACID -

  • Atomicity- S'assure que toutes les opérations au sein de l'unité de travail sont terminées avec succès; sinon, la transaction est abandonnée au point d'échec et les opérations précédentes sont restaurées à leur état antérieur.

  • Consistency - Garantit que la base de données change correctement d'état lors d'une transaction validée avec succès.

  • Isolation - Permet aux transactions de fonctionner indépendamment et de manière transparente les unes des autres.

  • Durability - Garantit que le résultat ou l'effet d'une transaction validée persiste en cas de défaillance du système.

Contrôle des transactions

Les commandes suivantes sont utilisées pour contrôler les transactions -

  • COMMIT - Pour enregistrer les modifications.

  • ROLLBACK - Pour annuler les modifications.

  • SAVEPOINT - Crée des points dans des groupes de transactions dans lesquels ROLLBACK.

  • SET TRANSACTION - Place un nom sur une transaction.

Les commandes de contrôle transactionnel ne sont utilisées qu'avec les commandes DML INSERT, UPDATE et DELETE uniquement. Ils ne peuvent pas être utilisés lors de la création ou de la suppression de tables car ces opérations sont automatiquement validées dans la base de données.

Afin d'utiliser les commandes de contrôle transactionnel dans MS SQL Server, nous devons commencer la transaction par «begin tran» ou commencer la commande de transaction, sinon ces commandes ne fonctionneront pas.

Commande COMMIT

La commande COMMIT est la commande transactionnelle utilisée pour enregistrer les modifications invoquées par une transaction dans la base de données. Cette commande enregistre toutes les transactions dans la base de données depuis la dernière commande COMMIT ou ROLLBACK.

Syntaxe

Voici la syntaxe de la commande COMMIT.

COMMIT;

Exemple

Considérez la table CUSTOMERS ayant les enregistrements suivants.

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'exemple de commande suivant supprimera les enregistrements de la table ayant age = 25, puis COMMIT les modifications dans la base de données.

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT

En conséquence, deux lignes de la table seraient supprimées et l'instruction SELECT produira la sortie suivante.

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

Commande ROLLBACK

La commande ROLLBACK est la commande transactionnelle utilisée pour annuler des transactions qui n'ont pas déjà été enregistrées dans la base de données. Cette commande ne peut être utilisée que pour annuler des transactions depuis la dernière commande COMMIT ou ROLLBACK a été émise.

Syntaxe

Voici la syntaxe de la commande ROLLBACK.

ROLLBACK

Exemple

Considérez la table CUSTOMERS ayant les enregistrements suivants.

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'exemple de commande suivant supprimera les enregistrements de la table ayant age = 25, puis ROLLBACK les modifications dans la base de données.

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
ROLLBACK

Par conséquent, l'opération de suppression n'aura aucun impact sur la table et l'instruction SELECT produira le résultat suivant.

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

Commande SAVEPOINT

SAVEPOINT est un point dans une transaction où vous pouvez restaurer la transaction à un certain point sans annuler la transaction entière.

Syntaxe

Voici la syntaxe de la commande SAVEPOINT.

SAVE TRANSACTION SAVEPOINT_NAME

Cette commande sert uniquement à la création d'un SAVEPOINT parmi les instructions transactionnelles. La commande ROLLBACK est utilisée pour annuler un groupe de transactions.

Voici la syntaxe pour revenir à un SAVEPOINT.

ROLLBACK TO SAVEPOINT_NAME

Dans l'exemple suivant, nous supprimerons trois enregistrements différents de la table CUSTOMERS. Nous devrons créer un SAVEPOINT avant chaque suppression, afin de pouvoir ROLLBACK vers n'importe quel SAVEPOINT à tout moment pour ramener les données appropriées à leur état d'origine.

Exemple

Considérez la table CUSTOMERS ayant les enregistrements suivants -

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

Voici la série d'opérations -

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.

Les trois suppressions ont eu lieu, cependant, nous avons changé d'avis et décidons de ROLLBACK vers le SAVEPOINT que nous avons identifié comme SP2. Étant donné que SP2 a été créé après la première suppression, les deux dernières suppressions sont annulées -

ROLLBACK Transaction SP2 
Rollback complete.

Notez que seule la première suppression a eu lieu depuis que nous sommes revenus au SP2.

SELECT * FROM CUSTOMERS

6 lignes sélectionnées.

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

Commande SET TRANSACTION

La commande SET TRANSACTION peut être utilisée pour lancer une transaction de base de données. Cette commande permet de spécifier les caractéristiques de la transaction qui suit.

Syntaxe

Voici la syntaxe de SET TRANSACTION.

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>