Une transaction se compose d'une ou plusieurs instructions SQL comme une seule unité. Chaque instruction SQL de cette unité est interdépendante et l'unité dans son ensemble est indivisible. Si une instruction dans l'unité ne peut pas se terminer avec succès, l'unité entière sera restaurée et toutes les données affectées seront remises à l'état avant le début de la transaction. Par conséquent, ce n’est que lorsque toutes les instructions de la transaction sont exécutées avec succès que l’on peut dire que la transaction a été exécutée avec succès.
Quatre caractéristiques des transactions :
Atomicité, chaque transaction doit être considérée comme une unité indivisible.
Cohérence, que la transaction réussisse complètement ou échoue à mi-chemin, la cohérence existe lorsque la transaction met le système dans un état cohérent.
Isolement, chaque transaction se produit dans son propre espace, isolée des autres transactions qui se produisent dans le système, et les résultats de la transaction ne peuvent être vus que lorsqu'elle est complètement exécutée.
Durabilité, même si le système plante, une transaction validée persistera.
Afin d'initialiser une transaction et d'indiquer à MySQL que toutes les instructions SQL suivantes doivent être considérées comme une unité, MySQL fournit la commande start transaction pour marquer le début d'une transaction. Vous pouvez également utiliser la commande Begin ou Begin Work pour initialiser une transaction. Normalement, la commande start transaction est suivie des instructions SQL qui composent la transaction.
Une fois l'instruction sql exécutée, vous pouvez utiliser la commande commit pour enregistrer l'intégralité de la transaction sur le disque, ou la commande rollback pour annuler toutes les modifications. Si la transaction inclut des modifications apportées aux tables de transactions et aux tables de non-transaction, la partie traitement des transactions des tables de non-transaction ne peut pas être annulée à l'aide de la commande rollback. Dans ce cas, MySQL renverra une erreur indiquant qu'une annulation incomplète s'est produite.
La commande commit marque la fin du bloc de transaction.
MySQL fournit deux variables pour contrôler le comportement des transactions : la variable de validation automatique et la variable de niveau d'isolation des transactions.
Soumission automatique. Par défaut, une fois la requête SQL de MySQL exécutée, les résultats seront automatiquement soumis à la base de données. Ce comportement par défaut peut être modifié via la variable de validation automatique spécifique. Avec set autocommit=0, les mises à jour ultérieures de la table ne seront pas enregistrées tant qu'une commande de validation n'est pas explicitement émise.
Niveau d'isolement des transactions, MySQL utilise par défaut le niveau d'isolement de lecture reproductible, qui peut être modifié à l'aide de set.
Étant donné que les bases de données qui prennent en charge les transactions ont plus de mal à isoler les différents utilisateurs les uns des autres que les bases de données non transactionnelles, cela reflète naturellement les performances du système.
Nous devons faire quelque chose pour garantir que les transactions n’alourdissent pas indûment le système.
Utiliser de petites transactions, deux stratégies courantes :
1 : Assurez-vous que toutes les entrées utilisateur requises sont réalisables avant d'émettre la commande de démarrage de la transaction
2 : Essayez de diviser les transactions volumineuses en transactions plus petites. Les transactions sont ensuite exécutées séparément.
Choisissez le niveau d'isolement approprié. Plus le niveau d'isolement est élevé, plus les performances sont faibles. Par conséquent, choisir le niveau d'isolement approprié permet d'optimiser les performances
Éviter les blocages dans un environnement de transaction. se produit lorsque deux clients ou plus dans des séquences différentes souhaitent mettre à jour les mêmes données en même temps. Nous devons éviter les blocages.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!