Database & Architecture
Thème :
Junior
1 vues ·3/12 leçonsComprendre les Transactions
Les transactions regroupent plusieurs opérations en une seule unité atomique. Soit tout réussit, soit tout échoue.
Les Propriétés ACID
- Atomicité : Tout ou rien
- Cohérence : La base de données reste valide
- Isolation : Les transactions concurrentes ne s’interfèrent pas
- Durabilité : Les données validées persistent
Transaction Basique
<?php
try {
$pdo->beginTransaction();
// Transférer de l'argent entre deux comptes
$stmt = $pdo->prepare('UPDATE accounts SET balance = balance - :amount WHERE id = :from');
$stmt->execute(['amount' => 100, 'from' => 1]);
$stmt = $pdo->prepare('UPDATE accounts SET balance = balance + :amount WHERE id = :to');
$stmt->execute(['amount' => 100, 'to' => 2]);
$pdo->commit(); // Les deux changements sont appliqués
} catch (Exception $e) {
$pdo->rollBack(); // Les deux changements sont annulés
throw $e;
}
Pourquoi les Transactions sont Importantes
<?php
// Sans transaction - Données incohérentes possibles !
$pdo->exec('UPDATE accounts SET balance = balance - 100 WHERE id = 1');
// Crash serveur ici = l'argent disparaît !
$pdo->exec('UPDATE accounts SET balance = balance + 100 WHERE id = 2');
// Avec transaction - Opération atomique
$pdo->beginTransaction();
$pdo->exec('UPDATE accounts SET balance = balance - 100 WHERE id = 1');
// Crash serveur ici = transaction automatiquement annulée
$pdo->exec('UPDATE accounts SET balance = balance + 100 WHERE id = 2');
$pdo->commit();
L’État de la Transaction
<?php
// Vérifier si une transaction est active
if ($pdo->inTransaction()) {
// Gérer différemment
}
// Transactions imbriquées (points de sauvegarde)
$pdo->beginTransaction();
// ... opérations ...
$pdo->exec('SAVEPOINT sp1');
// ... d'autres opérations ...
// Retour partiel en arrière
$pdo->exec('ROLLBACK TO sp1');
// Continuer et valider
$pdo->commit();
Le Comportement Auto-Commit
<?php
// Par défaut, chaque requête est auto-commitée
$pdo->exec('INSERT INTO logs VALUES (...)'); // Validée immédiatement
// beginTransaction() désactive l'auto-commit
$pdo->beginTransaction();
$pdo->exec('INSERT INTO logs VALUES (...)'); // Pas encore validée
$pdo->commit(); // Maintenant validée
// Ou
$pdo->rollBack(); // Annulée
Les Grimoires
📘 Cette leçon fait partie du cours PHP & Bases de Données Relationnelles sur la plateforme d’apprentissage RostoDev.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Comprendre les Transactions. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.