Les commentaires de Bibo sont toujours vides. Les changements non-commités ne sont donc pas visibles à l'extérieur de la
transaction qui les a faits. En particulier, une autre session n'a pas accès à ces changements.
Annulez la modification de Bibo dans la première session avec un ROLLBACK. Vous pouvez fermer la seconde session.
Démarrer explicitement une transaction
En désactivant le mode autocommit, en réalité, on démarre une transaction. Et chaque fois que l'on fait un rollback ou un commit
(ce qui met fin à la transaction), une nouvelle transaction est créée automatiquement, et ce tant que la session est ouverte.
Il est également possible de démarrer explicitement une transaction, auquel cas on peut laisser le mode autocommit activé, et
décider au cas par cas des requêtes qui doivent être faites dans une transaction.
Repassons donc en mode autocommit :
Code : SQL
SET autocommit=1;
Pour démarrer une transaction, il suffit de lancer la commande suivante :
Code : SQL
START TRANSACTION;
Avec MySQL, il est également possible de démarrer une transaction avec BEGIN ou BEGIN WORK. Cependant, il est
conseillé d'utiliser plutôt START TRANSACTION, car il s'agit de la commande SQL standard.
Une fois la transaction ouverte, les requêtes devront être validées pour prendre effet. Attention au fait qu'un COMMIT ou un
ROLLBACK met fin automatiquement à la transaction, donc les commandes suivantes seront à nouveau commitées
automatiquement si une nouvelle transaction n'est pas ouverte.
Exemples de transactions en mode autocommit
Code : SQL
-- Insertion d'un nouveau rat brun, plus vieux
INSERT INTO Animal (nom, espece_id, date_naissance, sexe)
VALUES ('Momy', 5, '2008-02-01 02:25:00', 'F');
-- Ouverture d'une transaction
START TRANSACTION;
-- La nouvelle rate est la mère de Buba et Baba
UPDATE Animal
SET mere_id = LAST_INSERT_ID()
WHERE espece_id = 5
AND nom IN ('Baba', 'Buba');
-- On annule les requêtes de la transaction, ce qui termine celleci
ROLLBACK;
-- La nouvelle rate est la mère de Bibo
UPDATE Animal
SET mere_id = LAST_INSERT_ID()
WHERE espece_id = 5
Partie 5 : Sécuriser et automatiser ses actions
225/414
www.openclassrooms.com
transaction qui les a faits. En particulier, une autre session n'a pas accès à ces changements.
Annulez la modification de Bibo dans la première session avec un ROLLBACK. Vous pouvez fermer la seconde session.
Démarrer explicitement une transaction
En désactivant le mode autocommit, en réalité, on démarre une transaction. Et chaque fois que l'on fait un rollback ou un commit
(ce qui met fin à la transaction), une nouvelle transaction est créée automatiquement, et ce tant que la session est ouverte.
Il est également possible de démarrer explicitement une transaction, auquel cas on peut laisser le mode autocommit activé, et
décider au cas par cas des requêtes qui doivent être faites dans une transaction.
Repassons donc en mode autocommit :
Code : SQL
SET autocommit=1;
Pour démarrer une transaction, il suffit de lancer la commande suivante :
Code : SQL
START TRANSACTION;
Avec MySQL, il est également possible de démarrer une transaction avec BEGIN ou BEGIN WORK. Cependant, il est
conseillé d'utiliser plutôt START TRANSACTION, car il s'agit de la commande SQL standard.
Une fois la transaction ouverte, les requêtes devront être validées pour prendre effet. Attention au fait qu'un COMMIT ou un
ROLLBACK met fin automatiquement à la transaction, donc les commandes suivantes seront à nouveau commitées
automatiquement si une nouvelle transaction n'est pas ouverte.
Exemples de transactions en mode autocommit
Code : SQL
-- Insertion d'un nouveau rat brun, plus vieux
INSERT INTO Animal (nom, espece_id, date_naissance, sexe)
VALUES ('Momy', 5, '2008-02-01 02:25:00', 'F');
-- Ouverture d'une transaction
START TRANSACTION;
-- La nouvelle rate est la mère de Buba et Baba
UPDATE Animal
SET mere_id = LAST_INSERT_ID()
WHERE espece_id = 5
AND nom IN ('Baba', 'Buba');
-- On annule les requêtes de la transaction, ce qui termine celleci
ROLLBACK;
-- La nouvelle rate est la mère de Bibo
UPDATE Animal
SET mere_id = LAST_INSERT_ID()
WHERE espece_id = 5
Partie 5 : Sécuriser et automatiser ses actions
225/414
www.openclassrooms.com
