Utiliser un point de sauvegarde (savepoint) pour un annulation partielle de transaction
Dans cette étape, vous apprendrez à utiliser des points de sauvegarde (savepoints) au sein d'une transaction pour permettre des annulations partielles. Les points de sauvegarde sont des marqueurs au sein d'une transaction vers lesquels vous pouvez revenir, annulant ainsi seulement certaines des modifications apportées pendant la transaction, plutôt que l'ensemble de la transaction.
En continuant depuis l'étape précédente, vous devriez toujours être connecté au serveur MySQL. Si ce n'est pas le cas, reconnectez-vous en utilisant la commande suivante :
mysql -u root -p
Entrez le mot de passe si vous y êtes invité, puis sélectionnez la base de données labex_db
:
USE labex_db;
Maintenant, démarrons une nouvelle transaction :
BEGIN;
Tout d'abord, créons un point de sauvegarde nommé savepoint1
:
SAVEPOINT savepoint1;
Cette commande crée un point de sauvegarde nommé savepoint1
. Toute modification apportée après ce point de sauvegarde peut être annulée jusqu'à ce point.
Maintenant, mettons à jour le solde de 'ACC001' :
UPDATE accounts SET balance = balance - 200 WHERE account_number = 'ACC001';
Ensuite, créons un autre point de sauvegarde nommé savepoint2
:
SAVEPOINT savepoint2;
Maintenant, insérons un nouvel enregistrement dans la table accounts
:
INSERT INTO accounts (account_number, balance) VALUES ('ACC004', 300.00);
Supposons que vous décidiez maintenant d'annuler l'insertion de 'ACC004', mais que vous souhaitiez conserver la mise à jour de 'ACC001'. Vous pouvez revenir au point de sauvegarde savepoint2
:
ROLLBACK TO savepoint2;
Cette commande annule la transaction jusqu'à l'état qu'elle avait lorsque le point de sauvegarde savepoint2
a été créé, annulant ainsi l'insertion de 'ACC004'.
Pour vérifier que l'annulation jusqu'au point de sauvegarde savepoint2
a réussi, vérifiez si 'ACC004' existe :
SELECT * FROM accounts WHERE account_number = 'ACC004';
Cette requête ne devrait retourner aucune ligne, indiquant que 'ACC004' a été supprimé.
Maintenant, vérifions le solde de 'ACC001' :
SELECT * FROM accounts WHERE account_number = 'ACC001';
Le solde de 'ACC001' devrait être mis à jour (diminué de 200).
Si vous êtes satisfait des modifications restantes (la mise à jour de 'ACC001'), vous pouvez maintenant valider la transaction :
COMMIT;
Cette commande valide la transaction, rendant la mise à jour de 'ACC001' permanente.
En résumé, cette étape a démontré comment utiliser des points de sauvegarde au sein d'une transaction pour permettre des annulations partielles. Cela offre un contrôle plus granulaire sur la gestion des transactions, vous permettant d'annuler des modifications spécifiques tout en conservant d'autres.