Déclaration COMMIT de MySQL
L'instruction `COMMIT` dans MySQL est utilisée pour sauvegarder de façon permanente tous les changements effectués pendant la transaction en cours. Il finalise la transaction, rendant toutes les modifications accessibles aux autres utilisateurs et sessions.
Utilisation
L'instruction `COMMIT` est typiquement utilisée après une série d'opérations `INSERT`, `UPDATE`, ou `DELETE` pour s'assurer que les changements sont sauvegardés dans la base de données. Elle est essentielle dans la gestion des transactions pour garantir l'intégrité des données.
COMMIT;
Cette syntaxe confirme que toutes les modifications de la transaction en cours sont enregistrées et ne peuvent pas être annulées. Notez que `COMMIT` n'est applicable que dans les moteurs de stockage qui supportent les transactions, comme InnoDB. Elle n'est pas applicable aux moteurs de stockage non transactionnels tels que MyISAM.
Exemples
1. Transaction de base (Basic Transaction Commit)
START TRANSACTION;
INSERT INTO accounts (name, balance) VALUES ('John Doe', 1000);
COMMIT;
Dans cet exemple, un nouveau compte est ajouté, et le changement est sauvegardé en utilisant `COMMIT` pour finaliser la transaction.
2. Validation de plusieurs modifications
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE name = 'John Doe';
UPDATE accounts SET balance = balance + 100 WHERE name = 'Jane Smith';
COMMIT;
Cet exemple transfère des fonds entre deux comptes. Les deux mises à jour sont finalisées ensemble avec un seul `COMMIT`, assurant l'atomicité.
3. Commit conditionnel avec gestion des erreurs
Pour gérer les validations conditionnelles et la détection des erreurs, utilisez la logique d'application ou les procédures stockées. Les instructions `IF` directes dans les scripts SQL ne sont pas prises en charge. Voici un exemple utilisant une procédure stockée :
DELIMITER //
CREATE PROCEDURE ConditionalCommit()
BEGIN
DECLARE order_exists INT;
START TRANSACTION;
DELETE FROM orders WHERE order_id = 101;
SELECT COUNT(*) INTO order_exists FROM orders WHERE order_id = 101;
IF order_exists = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END //
DELIMITER ;
Dans cet exemple, une procédure vérifie si la suppression de l'ordre est réussie avant de s'engager.
Conseils et bonnes pratiques
- Associez-le à `START TRANSACTION`. Utilisez `COMMIT` avec `START TRANSACTION` pour vous assurer que les changements font partie d'une transaction.
- Gérer les erreurs avec `ROLLBACK`. En cas d'erreur, annulez les modifications avant de les valider.
- Veillez à la cohérence des transactions et effectuez toutes les opérations nécessaires au sein d'une transaction avant de l'engager.
- Minimisez la durée des transactions afin de réduire le verrouillage et d'améliorer les performances.
- Testez avant de vous engager pour vérifier que toutes les modifications répondent à vos exigences.
Note complémentaire
L'émission d'un `COMMIT` sans un `START TRANSACTION` précédent n'a pas d'effet, car il n'y a pas de changements à finaliser. Veillez toujours à ce que l'option `START TRANSACTION` soit utilisée pour initier une transaction.