Les transactions
Les transactions avec MariaDB pour sécuriser les modifications de données.
Notions théoriques
Une transaction est un ensemble d'instructions SQL qui s'exécutent comme une seule unité logique.
Une transaction garantit que les opérations soient toutes exécutées, ou aucune si une erreur survient.
Les transactions sont essentielles pour assurer la cohérence, l'intégrité et la fiabilité des données dans une base de données relationnelle.
Propriétés ACID
Une transaction respecte les propriétés ACID :
- Atomicité : tout ou rien. Si une partie échoue, tout est annulé.
- Cohérence : les données restent valides selon les règles de la base.
- Isolation : les transactions ne se perturbent pas entre elles.
- Durabilité : une fois validées, les modifications sont enregistrées même en cas de panne.
Démarrer, valider et annuler une transaction
-
Pour démarrer une transaction :
START TRANSACTION; -
Pour valider (confirmer) les modifications :
COMMIT; -
Pour annuler (revenir en arrière) :
ROLLBACK;
Exemple d'utilisation
Imaginons une base de données de banque. Lors d’un virement, il faut :
- Retirer de l'argent du compte A
- Ajouter cet argent au compte B
Si une des deux opérations échoue, il faut annuler la transaction.
Transactions implicites vs explicites
- En mode implicite, chaque requête est une transaction.
- En mode explicite, il faut utiliser
START TRANSACTION,COMMIT,ROLLBACK.
Utilisation avec PHP (PDO)
PDO permet de gérer les transactions en PHP :
$pdo->beginTransaction(); // Démarre la transaction
$pdo->exec("SQL 1"); // Première requête
$pdo->exec("SQL 2"); // Deuxième requête
$pdo->commit(); // Valide tout
// En cas d'erreur :
$pdo->rollBack(); // Annule tout
Bonnes pratiques
- Toujours utiliser
try/catchpour gérer les erreurs. - Valider (
COMMIT) uniquement si toutes les opérations ont réussi. - Annuler (
ROLLBACK) dès qu’une erreur est détectée.
Exemple pratique
Il est possible de simuler une opération de virement entre deux comptes bancaires à l’aide d’une transaction SQL.
Structure de données à utiliser
CREATE TABLE comptes (
id INT PRIMARY KEY,
nom VARCHAR(50),
solde DECIMAL(10,2)
);
INSERT INTO comptes VALUES
(1, 'Alice', 1000.00),
(2, 'Bob', 500.00);
Exemple de transaction SQL
START TRANSACTION;
UPDATE comptes SET solde = solde - 200 WHERE id = 1;
UPDATE comptes SET solde = solde + 200 WHERE id = 2;
COMMIT;
Exemple en PHP avec PDO
try {
$pdo = new PDO("mysql:host=localhost;dbname=banque", "root", "");
$pdo->beginTransaction();
$pdo->exec("UPDATE comptes SET solde = solde - 200 WHERE id = 1");
$pdo->exec("UPDATE comptes SET solde = solde + 200 WHERE id = 2");
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "Erreur : " . $e->getMessage();
}
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Ce TP vous propose de mettre en œuvre des transactions SQL avec PHP (PDO) sur la base de données bibliotheque.
Vous manipulerez des opérations interdépendantes : si l'une échoue, l'ensemble devra être annulé. Vous allez créer plusieurs transactions pour illustrer les concepts d'atomicité, de cohérence et d'isolation. L’objectif est d’illustrer les propriétés ACID. Vous allez également tester la gestion des erreurs et le rollback.
N'oubliez pas, la pratique est la clé pour maîtriser une nouvelle compétence.
Étape 1 : Télécharger et importer la base de données
Télécharger le fichier SQL suivant et l'importer dans MariaDB :
👉 Télécharger le fichier 'cdi.sql' - Télécharger le MCD
Créer une base de données bibliotheque et importer le fichier téléchargé.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 : Préparer le fichier transactions.php
Créer un fichier transactions.php qui contiendra les différentes transactions.
Une solution
Vous devez être connecté pour voir le contenu.