MySQL - 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- Cela garantit 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 - Cela garantit que la base de données change correctement d'état lors d'une transaction validée avec succès.

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

  • Durability - Cela 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 terminez par un COMMIT ou un ROLLBACKdéclaration. Les commandes SQL 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 le SET AUTOCOMMIT = 0 commande, 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 le mysql_query() fonction.

Un 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 le mysql_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 une commande ROLLBACK, sinon émettez une commande COMMIT.

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

Vous ne pouvez pas utiliser les transactions directement, mais pour certaines exceptions, vous le pouvez. Cependant, ils ne sont pas sûrs et garantis. Si vous prévoyez d'utiliser des transactions dans votre programmation MySQL, 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 MySQL à partir de la source. Si votre version MySQL ne prend pas en charge InnoDB, demandez à votre fournisseur d'accès Internet de créer une version de MySQL prenant en charge les types de table InnoDB ou téléchargez et installez leMySQL-Max Binary Distribution pour Windows ou Linux / UNIX et travailler avec le type de table dans un environnement de développement.

Si votre installation MySQL prend en charge les tables InnoDB, ajoutez simplement un TYPE = InnoDB définition à l'instruction de création de table.

Par exemple, le code suivant crée une table InnoDB appelée tcount_tbl -

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

mysql> use TUTORIALS;
Database changed

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

Pour plus de détails sur InnoDB, vous pouvez cliquer sur le lien suivant - InnoDB

Vous pouvez utiliser d'autres types de tableaux comme GEMINI ou BDB, mais cela dépend de votre installation, qu'elle prenne en charge ces deux types de table ou non.