Les commandes transactionnelles permettent de contrôler des transactions se déroulant dans un système de gestion de base de données relationnelle (SGBDR).

Les transactions sont des séquences de tâches s'effectuant dans un ordre logique par l'intermédiaire de l'utilisateur ou d'une automatisation.

Les tâches peuvent être essentiellement des commandes DML; d'insertion (INSERT), de suppression (DELETE) ou de modification (UPDATE) d'objets dans une base de données.

Ces diverses tâches peuvent être annulées en cours d'exécution puisqu'elles possèdent un commencement et une fin.

Au terme de la tâche, il est nécessaire de sauvegarder les changements. Toutefois, aucun enregistrement n'est effectué si la tâche a échoué pour une raison quelconque.

Il existe, donc, quatres commandes transactionnelles principales pour contrôler ces séquences.

Les commandes transactionnelles
Commande
Description
{ SET | BEGIN } TRANSACTION;
détermine le début d'une transaction. BEGIN est utilisée sous SQL Server.
COMMIT [ WORK ];
enregistre les modifications produites par des transactions.
ROLLBACK{ [WORK | TO nom_point] };
annule les modifications qui n'ont pas été enregistrées précédemment.
SAVEPOINT nom_point;
insère un point de sauvegarde dans la liste de transactions, servant en conjonction avec ROLLBACK pour une annulation jusqu'à un point précis.

La commande SAVEPOINT évite une annulation complète des transactions par la commande ROLLBACK.

Transactions...
SAVEPOINT nom_point
Transactions...

ROLLBACK TO nom_point;

D'ailleurs, une commande spécifique permet de supprimer des points de sauvegardes créés par la commande SAVEPOINT.

RELEASE SAVEPOINT nom_point;
Exemple
SET TRANSACTION;

  SAVEPOINT sup1;
  DELETE FROM tbl_produit WHERE fabricant = 'AME et Cie';
  SAVEPOINT sup2;
  DELETE FROM tbl_produit WHERE fabricant = 'EROS';
  SAVEPOINT sup3;
  DELETE FROM tbl_produit 
         WHERE num_produit BETWEEN 12045367 AND 12045401;
  SAVEPOINT maj;
  INSERT INTO tbl_produit SELECT * FROM vue_nouveau_produit;

  ROLLBACK TO sup3;

  COMMIT;

BEGIN TRANSACTION
  USE base_donnee
GO
  UPDATE tbl_produit
  SET prix = (( prix * 12 ) / 100 ) + prix
  WHERE fabricant = 'CACO LOCA'
GO
  COMMIT
GO