Maison >base de données >tutoriel mysql >Transactions, verrous et applications MySQL (1)

Transactions, verrous et applications MySQL (1)

黄舟
黄舟original
2017-02-06 10:37:261488parcourir

1. Qu'est-ce qu'une transaction ?

Une transaction est une combinaison d'une ou plusieurs instructions d'opération de base de données et possède quatre caractéristiques ACID :

  • Atomicité (Atomicité)

Soit tous réussissent, soit tous sont annulés.

  • Cohérence (Cohérence)

Une fois que la base de données change d'état correctement, les contraintes de cohérence de la base de données ne sont pas violées.

  • Isolement

Les transactions sont indépendantes les unes des autres et n'interfèrent pas les unes avec les autres.

  • Durée (Durabilité)

Le résultat de la soumission de la transaction sera conservé dans la base de données.

2. Problèmes causés par la simultanéité des transactions

S'il n'y a pas d'isolation des transactions, cela peut se produire :

  • Lecture sale

Une lecture sale signifie que lorsqu'une transaction lit une donnée et la modifie, mais qu'elle n'a pas encore été soumise, une autre transaction lit également la donnée et l'utilise ensuite. Par exemple : le montant du compte de l'utilisateur est de 100, T1 le modifie à 200, mais ne le soumet pas. En même temps, T2 lit que le montant du compte de l'utilisateur est de 200, puis T1 revient anormalement, et les 200 sont lus par T2. ce sont des données sales.

  • Lecture non répétable

Lecture non répétable signifie que pour un certain élément de données dans la base de données, plusieurs requêtes au sein d'une transaction renvoient des valeurs différentes, cela est dû au fait qu'il a été modifié et validé par une autre transaction pendant l'intervalle de requête.

  • Lecture fantôme

Le nombre de lignes de données dans les deux requêtes d'une transaction est incohérent. Par exemple, une transaction interroge plusieurs colonnes de données et une autre transaction insère plusieurs nouvelles colonnes de données à ce moment-là. Dans la requête suivante, la première transaction découvrira qu'il y a plusieurs colonnes de données qu'elle n'avait pas auparavant, comme si. c'était une illusion. Pareil, c'est une lecture fantôme qui se produit.

3. Niveau d'isolement des transactions

Quels problèmes de concurrence le niveau d'isolement des transactions résout-il ? Quels autres problèmes de concurrence existent ?


1. Lire non validé (lire le contenu non validé)

Il s'agit du niveau d'isolement le plus bas d'une transaction, qui permet à une autre transaction de voir les données non validées de cette transaction. . Il n'y a aucun moyen d'éviter les problèmes de concurrence.


2. Lecture validée (lire le contenu de la soumission)

Assurez-vous que les données modifiées par une transaction ne peuvent être lues que par une autre transaction, c'est-à-dire une autre. transaction Une transaction ne peut pas lire les données qui n'ont pas été validées par la transaction. Les lectures sales peuvent être évitées, mais des lectures non répétables et des lectures fantômes peuvent se produire.


3. Lecture répétable (lisible)

Il s'agit du niveau d'isolation des transactions par défaut de MySQL, qui garantit que plusieurs instances de la même transaction peuvent lire simultanément. données, vous verrez les mêmes données. Les lectures incorrectes et les lectures non répétables peuvent être évitées, mais des lectures fantômes peuvent se produire.


4. Sérialisable (sérialisable)

Il s'agit du niveau d'isolement le plus élevé. Il force l'ordre des transactions, ce qui rend impossible tout conflit entre elles. autre. À ce niveau, de nombreux délais d'attente et conflits de verrouillage peuvent en résulter. Cela peut éviter l'apparition de lectures sales, de lectures non répétables et de lectures fantômes.


L'article suivant présente le mécanisme de verrouillage du moteur InnoDB.

Ce qui précède est le contenu des transactions, des verrous et des applications MySQL (1). Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


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
Article précédent:Transaction MySQLArticle suivant:Transaction MySQL