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 auto-commit et pour valider et annuler les transactions.
Exemple #1 Définir le mode auto-commit via SQL ou via l'API
<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Echec de la connexion à MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
/* 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 */
if (!$mysqli->query('SET AUTOCOMMIT = 0')) {
echo "Echec de la requête : (" . $mysqli->errno . ") " . $mysqli->error;
}
?>
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 auto-commit, pour valider ou annuler une transaction.
Exemple #2 Validation et annulation d'une transaction
<?php
$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