SAVEPOINT
La commande SAVEPOINT en SQL fait partie du Transaction Control Language, qui permet de gérer des transactions. Une transaction est un groupe d’instructions, commençant par ‘BEGIN TRANSACTION ;’ et se terminant, soit par un ‘ROLLBACK’, soit par un ‘COMMIT’. L’instruction SAVEPOINT permet de garder en mémoire l’état du système à un moment précis, au sein d’une transaction. On peut ensuite retourner à cet état à l’aide de la commande ‘ROLLBACK’. L’intérêt de SAVEPOINT est que cette commande permet de revenir à un état antérieur, sans revenir à l’état antérieur au début de la transaction.
Voici la syntaxe courante :
BEGIN TRANSACTION ;
Instructions ;
SAVEPOINT savepoint_name ;
--Ou, sur SQL Server : SAVE TRANSACTION savepoint_name ;
Instructions ;
ROLLBACK TO SAVEPOINT savepoint_name ;
--Ou, sur SQL Server : ROLLBACK TRANSACTION savepoint_name ;
RELEASE SAVEPOINT savepoint_name ; --Permet de libérer l’espace mémoire dans lequel était stocké le savepoint
COMMIT ;
Exemple d’utilisation :
Imaginons une base de données ‘gest_fact’, qu’une entreprise a créée pour stocker les données relatives aux factures qu’elle a émises : la liste des produits commercialisés par l’entreprise, la liste des factures émises par l’entreprise et le détail de chaque ligne de facture. ‘Gest_fact’ est constituée de trois tables : ‘produit’, ‘facture’ et ‘ligne_facture’. On souhaite maintenant ajouter une ligne à une facture, à l’aide d’une transaction. On rajoute ensuite une deuxième ligne, mais, finalement, on souhaite retrouver l’état de la base de données entre l’ajout des deux lignes, avant de COMMIT la transaction. Voici le code correspondant :
BEGIN TRANSACTION;
INSERT INTO ligne_facture (nom_produit, num_facture, quantite, num_lf, statut)
VALUES ('P04', 'F010', 2, 1, 'vente directe') ;
SAVEPOINT savepoint1 ;
INSERT INTO ligne_facture (nom_produit, num_facture, quantite, num_lf, statut)
VALUES ('P03', 'F011', 1, 1, 'vente directe') ;
ROLLBACK TO SAVEPOINT savepoint1 ;
COMMIT;
Voici l'état de la fin de la table ligne_facture après l'exécution de ce code :

_
Nos formations sur https://www.apprendresql.com/
Voir autres : ALTER TABLE, CREATE TABLE, DROP TABLE, AND, AS, AUTO_INCREMENT, AVG(), BETWEEN, COUNT(), CROSS JOIN, DELETE, DISTINCT, FOREIGN KEY, FULL JOIN, GROUP BY, HAVING, IN, INNER JOIN, INSERT, INTERSECT, IS NULL, LEFT JOIN, LIKE, MAX(), MERGE, MIN(), NATURAL JOIN, OR, ORDER BY, PRIMARY KEY, RIGHT JOIN, SELECT, SUM(), UNION, UPDATE, WITH ROLLUP, GRANT, REVOKE, BEGIN TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT