Dans les opérations de base de données, afin de garantir efficacement l'exactitude des données lues simultanément, le niveau d'isolation des transactions est proposé. Il existe 4 niveaux d'isolement pour les transactions de base de données. La norme SQL définit 4 niveaux d'isolement, y compris des règles spécifiques pour limiter les modifications visibles et invisibles à l'intérieur et à l'extérieur de la transaction. L'article suivant analyse en détail les informations pertinentes sur les quatre niveaux d'isolation des transactions dans MySQL à travers des exemples. Les amis dans le besoin peuvent s'y référer.
Avant-propos
Pas grand chose à dire ci-dessous, jetons un œil à l'introduction détaillée.
Il existe quatre niveaux d'isolement pour les transactions de base de données :
Lecture non validée : les lectures incorrectes sont autorisées, c'est-à-dire que les transactions non validées dans d'autres sessions peuvent être lues.
Lecture validée : seules les données soumises peuvent être lues par défaut.
Lecture répétée : lecture répétable. Les requêtes au sein d'une même transaction sont cohérentes au début de la transaction, niveau par défaut d'InnoDB. Dans le standard SQL, ce niveau d'isolement élimine les lectures non répétables, mais les lectures fantômes existent toujours.
Lecture série (sérialisable) : lecture entièrement sérialisée. Chaque lecture nécessite un verrou partagé au niveau de la table, et la lecture et l'écriture se bloqueront.
Les amis qui sont exposés pour la première fois au concept d'isolement des transactions peuvent être déroutés par la définition du manuel ci-dessus. Expliquons les quatre niveaux d'isolement à travers des exemples spécifiques.
Nous créons d'abord une table utilisateur :
1 2 3 4 5 6 |
|
Lire le niveau d'isolement non validé
Nous définissons d'abord le niveau d'isolement de la transaction pour lire validé :
1 2 3 4 5 6 7 8 9 |
|
Ci-dessous, nous avons ouvert deux terminaux pour simuler respectivement la transaction un et la transaction deux. p.s : L'opération un et l'opération deux sont censées être exécutées dans l'ordre chronologique.
Transaction 1
1 2 3 4 |
|
Transaction 2
1 2 3 4 5 6 7 8 9 |
|
Il ressort clairement des résultats d'exécution ci-dessus que sous le niveau de lecture non engagé, nous sommes dans la première transaction. est possible de lire des données qui ne sont pas validées dans la transaction deux, ce qui constitue une lecture sale.
Niveau d'isolement de lecture validé
Le problème de lecture sale ci-dessus peut être résolu en définissant le niveau d'isolement sur validé.
1 |
|
Transaction 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Transaction 2
1 2 3 4 5 6 7 |
|
Bien que le problème de lecture sale ait été résolu, veuillez noter que dans l'opération 7 de la transaction 1, transaction 2. Après la validation de l'opération 6, la transaction 1 lira des données différentes deux fois dans la même transaction. Il s'agit d'un problème de lecture non répétable. L'utilisation de la lecture répétable du troisième niveau d'isolement de transaction peut résoudre ce problème.
Niveau d'isolement de lecture répétable
Le niveau d'isolement des transactions par défaut du moteur de stockage Innodb de MySQL est le niveau d'isolement de lecture répétable, nous n'avons donc pas besoin de définir de paramètres supplémentaires.
Transaction 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Transaction 2
1 2 3 4 5 |
|
Dans l'opération 5 de la transaction 1, nous n'avons pas lu la mise à jour de la transaction 2 dans l'opération 3. La mise à jour les données ne peuvent être lues qu'après validation.
InnoDB a-t-il résolu les lectures fantômes ?
En fait, des lectures fantômes peuvent se produire au niveau RR. Le moteur InnoDB prétend officiellement utiliser le contrôle de concurrence multi-version MVCC pour résoudre ce problème. qu'Innodb est vraiment. La lecture fantôme a-t-elle été résolue ?
Pour faciliter l'affichage, j'ai modifié le tableau utilisateur ci-dessus :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Transaction 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Transaction 2
1 2 3 4 5 6 |
|
Comme le montre l'exemple ci-dessus, Innodb ne résout pas la lecture fantôme comme indiqué officiellement, mais le scénario ci-dessus n'est pas très courant et il n'y a pas lieu de trop s'inquiéter.
Niveau d'isolement de sérialisation
Toutes les transactions sont exécutées en série au niveau d'isolement le plus élevé, les lectures fantômes ne se produiront pas et les performances seront très médiocres.
Recommandations associées :
Tutoriel d'exemple de niveau d'isolation des transactions MySQL
Explication détaillée et comparaison des quatre niveaux d'isolation des transactions MySQL
Une brève analyse de l'impact du niveau d'isolation des transactions MySQL sur ses performances
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!