Le serveur MySQL supporte les transactions suivant le moteur de stockage utilisé. Depuis MySQL 5.5, le moteur de stockage par défaut est InnoDB. InnoDB a un support complet des transactions ACID.
Les transactions peuvent soit être contrôlées en utilisant SQL, soit par des appels API.
Il est recommandé d'utiliser les appels API pour activer ou désactiver
le mode autocommit
et pour valider et annuler les transactions.
Exemple #1 Définir le mode autocommit
via SQL ou via l'API
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
// Recommandé : utilisation de l'API pour contrôler la configuration des transactions
$mysqli->autocommit(false);
// Ne sera pas monitoré et reconnu par le plugin de réplication et de balance de charge
$mysqli->query('SET AUTOCOMMIT = 0');
Les paquets de fonctionnalités additionnelles, comme les plugins de réplication
et de balance de charge peuvent monitorer les appels API. Le plugin de réplication
offre une sécurité sur les transactions lors de la balance de charge, si
les transactions sont contrôlées avec des appels API. La sécurité des
transactions lors de la balance de charge n'est pas disponible si les requêtes
SQL sont utilisées pour définir le mode autocommit
, pour valider ou annuler
une transaction.
Exemple #2 Validation et annulation d'une transaction
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
$mysqli->autocommit(false);
$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();
$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
Veuillez noter que le serveur MySQL ne peut pas annuler toutes les requêtes. Quelques requêtes requièrent une validation implicite.
Voir aussi