Maison  >  Article  >  base de données  >  Une brève discussion sur les transactions de base de données et les niveaux d'isolement

Une brève discussion sur les transactions de base de données et les niveaux d'isolement

青灯夜游
青灯夜游avant
2019-11-29 17:04:322920parcourir

Une brève discussion sur les transactions de base de données et les niveaux d'isolement

Transaction

Une transaction fait référence à un ensemble d'opérations qui répondent aux caractéristiques ACID. Une transaction peut être soumise via. Valider Vous pouvez également utiliser Rollback pour revenir en arrière.

ACIDE

1. Atomicité

Les transactions sont considérées comme indivisibles La plus petite unité de la transaction , toutes les opérations de la transaction sont soit soumises avec succès, soit toutes les opérations échouent et sont annulées. Le rollback peut être implémenté à l'aide des journaux de rollback. Le journal de rollback enregistre les opérations de modification effectuées par la transaction. Ces opérations de modification peuvent être effectuées en sens inverse lors du rollback.

2. Cohérence

La cohérence signifie qu'une transaction doit transformer la base de données d'un état de cohérence à un autre, c'est-à-dire qu'une transaction doit être dans un état cohérent avant et après son exécution.

Prenons l'exemple du transfert, en supposant que l'argent total de l'utilisateur A et de l'utilisateur B est de 5 000, alors peu importe la manière dont le transfert se déroule entre A et B, ou le nombre de fois que le transfert est effectué, l'argent de les deux utilisateurs seront les mêmes une fois la transaction terminée. Le total devrait atteindre 5 000, ce qui correspond à la cohérence de la transaction.

3. Isolement

L'isolement se produit lorsque plusieurs utilisateurs accèdent à la base de données simultanément, par exemple lors de l'utilisation de la même table, la base de données est activée pour chaque utilisateur. La transaction ne peut pas être perturbée par les opérations d'autres transactions, et plusieurs transactions simultanées doivent être isolées les unes des autres.

C'est-à-dire pour obtenir un tel effet : pour deux transactions simultanées T1 et T2, du point de vue de la transaction T1, T2 se termine avant le début de T1, ou commence après la fin de T1, donc chaque transaction ignore que d'autres transactions s'exécutent simultanément.

4. Durabilité

La durabilité signifie qu'une fois qu'une transaction est soumise, les modifications apportées aux données dans la base de données sont permanentes, même si l'opération de validation des transactions ne le sera pas. être perdu même si le système de base de données rencontre une panne.

Problèmes de cohérence de concurrence

1 Lecture sale

La lecture sale fait référence à des données de. une autre transaction non validée a été lue pendant le traitement de la transaction.

T1 modifie une donnée, et T2 lit ensuite cette donnée. Si T1 annule cette modification, alors les données lues par T2 sont des données sales.

Une brève discussion sur les transactions de base de données et les niveaux disolement

2. Lecture non répétable

Lecture non répétable signifie que pour certaines données de la base de données, dans le cadre de une transaction Plusieurs requêtes ont renvoyé des valeurs de données différentes, car elles ont été modifiées et validées par une autre transaction entre les requêtes.

Par exemple, la transaction T1 lit certaines données, et la transaction T2 modifie immédiatement les données et soumet la transaction à la base de données. La transaction T1 lit à nouveau les données et obtient des résultats différents, et envoie une lecture non répétable.

La différence entre la lecture non répétable et la lecture sale est que la lecture sale se produit lorsqu'une transaction lit les données sales non validées d'une autre transaction, tandis que la lecture non répétable se produit lorsque les données soumises par la transaction précédente sont lues.

Une brève discussion sur les transactions de base de données et les niveaux disolement

3. Lecture fantôme

La lecture fantôme est un phénomène qui se produit lorsque les transactions ne sont pas exécutées de manière indépendante. Par exemple, la transaction T1 modifie une donnée dans toutes les lignes d'un tableau de "1" à "2". A ce moment, la transaction T2 insère une ligne de données dans la table, et la valeur de cette donnée reste "1". " et soumis à la base de données. Si l'utilisateur qui opère la transaction T1 regarde les données qui viennent d'être modifiées, il constatera qu'il y a encore une ligne qui n'a pas été modifiée. En fait, cette ligne a été ajoutée à partir de la transaction T2. ​​C'est comme une hallucination. C'est une lecture fantôme.

Les lectures fantômes et les lectures non répétables lisent toutes deux une autre transaction validée (ceci est différent des lectures sales). La différence est que les lectures non répétables interrogent le même élément de données, tandis que les lectures fantômes interrogent le même élément de données. La lecture cible un lot de données dans son ensemble (comme le nombre de données).

T1 lit les données dans une certaine plage, T2 insère de nouvelles données dans cette plage et T1 lit à nouveau les données dans cette plage. Le résultat lu à ce moment est différent du résultat lu la première fois.

Une brève discussion sur les transactions de base de données et les niveaux disolement

Niveau d'isolement MySQL

1. exécutés en série.

Peut éviter les lectures sales, les lectures non répétables et les lectures fantômes.

2. Lecture répétable : Garantit que le résultat de la lecture des mêmes données plusieurs fois dans la même transaction est le même

Les lectures sales peuvent être évitées, un non- une lecture répétable se produit.

3. Lecture validée : Une transaction ne peut lire que les modifications apportées par la transaction validée

Cela peut éviter l'apparition de lectures sales.

4. Lire non validé : Les modifications dans une transaction sont visibles par les autres transactions même si elles ne sont pas validées

Le niveau le plus bas, aucune garantie dans aucune situation.

Le niveau d'isolement le plus élevé est le niveau sérialisable, et le plus bas est le niveau de lecture non validé. Plus le niveau est élevé, plus l'efficacité d'exécution est faible.

Un niveau comme Serialisable utilise une table de verrouillage (similaire au verrou dans le multi-threading Java) afin que les autres threads ne puissent attendre qu'en dehors du verrou, donc le niveau d'isolement que vous choisissez habituellement doit être basé sur la situation réelle. .

Le niveau d'isolement par défaut dans la base de données MySQL est Lecture répétable.

Dans la base de données Oracle, seuls deux niveaux sont pris en charge : le niveau sérialisable (sérialisation) et le niveau de lecture validée (lecture validée).

Apprentissage recommandé : Tutoriel MySQL

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer