MySQLi - Transactions

Une transaction est un groupe séquentiel d'opérations de manipulation de base de données, qui est effectuée comme s'il s'agissait d'une seule unité de travail. En d'autres termes, une transaction ne sera jamais complète à moins que chaque opération individuelle au sein du groupe réussisse. Si une opération au sein de la transaction échoue, la transaction entière échouera.

En pratique, vous regrouperez de nombreuses requêtes SQL dans un groupe et vous les exécuterez toutes ensemble dans le cadre d'une transaction.

Propriétés des transactions

Les transactions ont les quatre propriétés standard suivantes, généralement désignées par l'acronyme ACID -

  • Atomicity- s'assure que toutes les opérations au sein de l'unité de travail sont menées à bien; sinon, la transaction est abandonnée au point d'échec et les opérations précédentes sont restaurées à leur état antérieur.

  • Consistency - garantit que la base de données change correctement d'état lors d'une transaction validée avec succès.

  • Isolation - permet aux transactions de fonctionner de manière indépendante et transparente les unes par rapport aux autres.

  • Durability - garantit que le résultat ou l'effet d'une transaction validée persiste en cas de défaillance du système.

Dans MySQL, les transactions commencent par l'instruction BEGIN WORK et se terminent par une instruction COMMIT ou ROLLBACK. Les commandes SQLi entre les instructions de début et de fin constituent l'essentiel de la transaction.

COMMIT et ROLLBACK

Ces deux mots-clés Commit et Rollback sont principalement utilisés pour les transactions MySQL.

  • Lorsqu'une transaction réussie est terminée, la commande COMMIT doit être émise afin que les modifications apportées à toutes les tables impliquées prennent effet.

  • En cas d'échec, une commande ROLLBACK doit être émise pour ramener chaque table référencée dans la transaction à son état précédent.

Vous pouvez contrôler le comportement d'une transaction en définissant la variable de session appelée AUTOCOMMIT. Si AUTOCOMMIT est défini sur 1 (valeur par défaut), chaque instruction SQL (dans une transaction ou non) est considérée comme une transaction complète et validée par défaut lorsqu'elle se termine. Lorsque AUTOCOMMIT est défini sur 0, en émettant la commande SET AUTOCOMMIT = 0, la série d'instructions suivante agit comme une transaction et aucune activité n'est validée jusqu'à ce qu'une instruction COMMIT explicite soit émise.

Vous pouvez exécuter ces commandes SQL en PHP en utilisant mysqli_query() fonction.

Exemple générique de transaction

Cette séquence d'événements est indépendante du langage de programmation utilisé; le chemin logique peut être créé dans la langue que vous utilisez pour créer votre application.

Vous pouvez exécuter ces commandes SQL en PHP en utilisant mysqli_query() fonction.

  • Commencez la transaction en exécutant la commande SQL BEGIN WORK.

  • Émettez une ou plusieurs commandes SQL telles que SELECT, INSERT, UPDATE ou DELETE.

  • Vérifiez s'il n'y a pas d'erreur et que tout est conforme à vos besoins.

  • S'il y a une erreur, émettez la commande ROLLBACK, sinon exécutez une commande COMMIT.

Types de table sécurisés pour les transactions dans MySQLi

Vous ne pouvez pas utiliser les transactions directement, vous le pouvez mais elles ne seraient pas sûres et garanties. Si vous prévoyez d'utiliser des transactions dans votre programmation MySQLi, vous devez créer vos tables d'une manière spéciale. Il existe de nombreux types de tables, qui prennent en charge les transactions, mais la plus populaire estInnoDB.

La prise en charge des tables InnoDB nécessite un paramètre de compilation spécifique lors de la compilation de MySQLi à partir des sources. Si votre version MySQLi ne prend pas en charge InnoDB, demandez à votre fournisseur d'accès Internet de créer une version de MySQLi avec prise en charge des types de table InnoDB ou téléchargez et installez la distribution binaire MySQL-Max pour Windows ou Linux / UNIX et travaillez avec le type de table dans un environnement de développement.

Si votre installation MySQLi prend en charge les tables InnoDB, ajoutez simplement un TYPE = InnoDBdéfinition à l'instruction de création de table. Par exemple, le code suivant crée une table InnoDB appelée tutorials_innodb -

[email protected]# mysql -u root -p;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_innodb
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)

Consultez le lien suivant pour en savoir plus sur - InnoDB

Vous pouvez utiliser d'autres types de tableaux comme GEMINI ou BDB, mais cela dépend de votre installation s'il prend en charge ces deux types.