Maison  >  Article  >  base de données  >  Explication détaillée du niveau d'isolement des transactions

Explication détaillée du niveau d'isolement des transactions

藏色散人
藏色散人original
2020-03-03 10:28:2318158parcourir

Explication détaillée du niveau d'isolement des transactions

Niveau d'isolement de la transaction

Dans les opérations de base de données, afin d'assurer efficacement l'exactitude des données lues simultanément, Le niveau d’isolement des transactions proposé.

Recommandé : "Tutoriel mysql"

Poser des questions

La base de données doit être partagée et accessible par les clients. Les situations incertaines suivantes sont susceptibles de se produire lors des opérations de base de données.

Mise à jour perdue

Les deux transactions mettent à jour une ligne de données en même temps, et la mise à jour des données par une transaction écrase la mise à jour des données par l'autre transaction. En effet, le système n'effectue aucune opération de verrouillage, les transactions simultanées ne sont donc pas isolées.

Lecture sale

Une transaction lit les résultats de l'opération de données non validées d'une autre transaction. C'est assez dangereux car il est possible que toutes les opérations soient annulées.

Lectures non répétables

Lectures non répétables : une transaction lit deux fois la même ligne de données, mais obtient des résultats différents.

Comprend les situations suivantes :

(1) Lecture virtuelle : après que la transaction T1 ait lu une certaine donnée, la transaction T2 la modifie, et lorsque la transaction T1 la lit à nouveau. les données obtiennent une valeur différente de la fois précédente.

(2) Lectures fantômes : La transaction effectue deux requêtes pendant l'opération. Le résultat de la deuxième requête contient des données qui n'apparaissaient pas dans la première requête ou sont manquantes dans la première requête. il n'est pas nécessaire que les instructions SQL des deux requêtes soient identiques). Cela est dû au fait qu'une autre transaction insère des données lors des deux requêtes.

Solution

Afin d'éviter les situations ci-dessus, dans la spécification SQL standard, 4 niveaux d'isolement des transactions sont définis. Différents niveaux d'isolement ont des effets différents sur la gestion des transactions. est différent.

Lecture non autorisée

Également connue sous le nom de lecture non validée : les lectures incorrectes sont autorisées, mais les mises à jour perdues ne sont pas autorisées. Si une transaction a commencé à écrire des données, une autre transaction n'est pas autorisée à écrire des données en même temps, mais d'autres transactions sont autorisées à lire cette ligne de données. Ce niveau d'isolement peut être atteint grâce à un "verrouillage en écriture exclusif".

Lecture autorisée

Également connue sous le nom de lecture validée : les lectures non répétables sont autorisées, mais les lectures sales ne sont pas autorisées. Ceci peut être réalisé grâce à des « verrous de lecture partagés transitoires » et des « verrous d'écriture exclusifs ». La transaction qui lit les données permet aux autres transactions de continuer à accéder à la ligne de données, mais la transaction d'écriture non validée empêchera les autres transactions d'accéder à la ligne.

Lecture répétable

Lecture répétable : les lectures non répétables et les lectures incorrectes sont interdites, mais des données de lecture fantôme peuvent parfois se produire. Ceci peut être réalisé grâce à des « verrous de lecture partagés » et des « verrous d'écriture exclusifs ». Les transactions qui lisent des données désactiveront les transactions d'écriture (mais autoriseront les transactions de lecture), et les transactions d'écriture désactiveront toutes les autres transactions.

Sérialisable

Sérialisable : fournit une isolation stricte des transactions. Cela nécessite que les transactions soient exécutées en série, et les transactions ne peuvent être exécutées que les unes après les autres et ne peuvent pas être exécutées simultanément. La sérialisation des transactions ne peut pas être réalisée uniquement via des « verrous au niveau des lignes ». D'autres mécanismes doivent être utilisés pour garantir que les données nouvellement insérées ne seront pas accessibles par la transaction qui vient d'exécuter l'opération de requête.

Plus le niveau d'isolement est élevé, plus les données peuvent être garanties complètes et cohérentes, mais plus l'impact sur les performances de concurrence est grand. Pour la plupart des applications, vous pouvez donner la priorité à la définition du niveau d'isolement du système de base de données sur Lecture validée. Il peut éviter les lectures sales et offre de meilleures performances de concurrence. Bien que cela entraîne des problèmes de concurrence tels que des lectures non répétables, des lectures fantômes et des mises à jour perdues de type II, dans des situations individuelles où de tels problèmes peuvent survenir, ils peuvent être contrôlés par l'application à l'aide du verrouillage pessimiste ou du verrouillage optimiste.

Pour plus de contenu lié à la programmation, veuillez faire attention à la colonne Introduction à la programmation sur le site Web PHP chinois !

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn