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 transactionnellesCommande |
---|
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.
ExempleRELEASE SAVEPOINT nom_point;
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 |