Comparaison des quatre niveaux d'isolation de MySQL
pré-déclaration
Récemment, j'ai examiné les questions d'entretien courantes de MySQL, je vais donc les enregistrer brièvement.
Comparaison de quatre niveaux d'isolement
Principalement pour assurer l'isolement dans ACID, la cohérence est l'objectif. L'atomicité, l'isolement et la persistance sont tous des moyens.
niveau d'isolement | Lecture sale | Lecture fantôme | Lecture non répétable (Lecture non répétable) |
---|---|---|---|
Lecture non validée | Pourrait arriver | Pourrait arriver | Pourrait arriver |
Lecture validée | ça n'arrivera pas | Pourrait arriver | Pourrait arriver |
Lecture répétable | ça n'arrivera pas | Pourrait arriver | ça n'arrivera pas |
Sérialisable | ça n'arrivera pas | ça n'arrivera pas | ça n'arrivera pas |
Remarque : Peut se produire indique que le problème peut se produire sous ce niveau d'isolement. Ne se produit pas signifie que le problème ne se produit pas sous ce niveau d'isolement.
Il convient de noter que différents niveaux d'isolement entraîneront différents compromis entre les performances de concurrence et la cohérence des données. À mesure que le niveau d'isolement augmente, les performances de concurrence de la base de données diminuent généralement, mais la cohérence des données est mieux garantie. Le choix d'un niveau d'isolement approprié nécessite un compromis basé sur les besoins de l'application.
Niveau lecture non validée (READ UNCOMMITTED) , l'opération de lecture dans la transaction peut voir la modification de la transaction non validée. Par conséquent, des lectures incorrectes peuvent se produire. Dans le même temps, étant donné que la modification d'autres transactions peut également affecter les données, une lecture fantôme et une lecture non répétable peuvent se produire.
Niveau lecture validée (READ COMMITTED) , l'opération de lecture dans la transaction ne peut voir que la modification de la transaction validée. Par conséquent, les lectures modifiées ne peuvent pas se produire. Cependant, des lectures fantômes et non répétables peuvent toujours se produire.
Niveau de lecture répétable (REPEATABLE READ) , le niveau d'isolation par défaut de MySQL. Lorsqu'une opération de lecture dans une transaction lit plusieurs fois la même ligne de données dans la même transaction, le résultat est toujours cohérent, sauf si la transaction elle-même est modifiée. Par conséquent, les lectures non répétables ne peuvent pas se produire. Cependant, des lectures fantômes peuvent toujours se produire.
Au niveau SERIALIZABLE , l'ordre de sérialisation des transactions assure l'isolement des transactions. Par conséquent, les lectures modifiées, les lectures fantômes et les lectures non répétables sont impossibles. Cependant, il existe une surcharge de performances significative à ce niveau car une transaction doit généralement attendre la fin de la transaction précédente avant de continuer.
trois questions
-
Dirty Read : une transaction lit les données non validées d'une autre transaction. Cela peut entraîner la lecture de données non valides ou incohérentes.
-
Lecture fantôme : lorsqu'une transaction lit une plage de données, une autre transaction insère de nouvelles données dans la plage, ce qui oblige la première transaction à trouver de nouvelles données lorsqu'elle relit la plage de données. Les données s'affichent.
-
Lecture non répétable (lecture non répétable): après qu'une transaction a lu certaines données, lorsqu'elle relit les données, elle constate que les données ont été modifiées ou supprimées par d'autres transactions.