Maison > base de données > tutoriel mysql > Quel est le niveau d'isolement des transactions MySQL ?

Quel est le niveau d'isolement des transactions MySQL ?

WBOY
Libérer: 2023-06-01 17:26:08
avant
2668 Les gens l'ont consulté

1. La notion de niveau d'isolement

Pourquoi devrions-nous considérer le niveau d'isolement ?

Étant donné que les transactions doivent être exécutées simultanément, et que l'exécution simultanée peut entraîner certains problèmes : lectures incorrectes, lectures non répétables et lectures virtuelles, certaines sont autorisées et d'autres ne sont pas autorisées. différents degrés ou le contrôle de la concurrence ne semble pas avoir différents niveaux d'isolement.

Les quatre niveaux d'isolement pris en charge par MySQL sont :

  • TRANSACTION_READ_UNCOMMITTED : Lecture non validée. Cela signifie que la transaction A peut voir les modifications de la transaction B avant de s'engager. De cette manière, les données sales sont lues et les lectures non répétables et les lectures fantômes sont autorisées.

  • TRANSACTION_READ_COMMITTED : Lecture validée (par défaut d'Oracle), indiquant que la lecture de données non validées n'est pas autorisée (pour éviter les lectures sales). Les lectures non répétables et les lectures fantômes sont toujours autorisées à ce niveau.

  • TRANSACTION_REPEATABLE_READ : Lecture répétable (par défaut MySQL), indiquant que la transaction est garantie de pouvoir relire les mêmes données sans échec. Même si d'autres transactions modifient ces données, vous ne les verrez pas deux fois. être interrogé est différent. Mais la lecture fantôme se produit toujours.

  • TRANSACTION_SERIALIZABLE : Sérialisation, est le niveau d'isolation de transaction le plus élevé, qui empêche les lectures sales, les lectures non répétables et les lectures fantômes. L'exécution en série équivaut à une opération monothread, avec la capacité de concurrence la plus faible.

Quel est le niveau disolement des transactions MySQL ?

Remarque :

Plus le niveau d'isolation des transactions est élevé, plus les performances sont dépensées pour éviter les conflits, c'est-à-dire que l'efficacité est faible. Au niveau « lecture répétable », cela peut en fait résoudre une partie du problème de lecture virtuelle, mais il ne peut pas empêcher le problème de lecture virtuelle provoqué par les mises à jour. Pour interdire l'apparition de lectures virtuelles, vous devez toujours définir le niveau d'isolement de sérialisation.

Le client MySQL fonctionne au niveau de lecture répétable par défaut :

Quel est le niveau disolement des transactions MySQL ? 2. Testez le niveau d'isolement TRANSACTION_READ_UNCOMMITTED

Quel est le niveau disolement des transactions MySQL ?

Quel est le niveau disolement des transactions MySQL ?Si le client A est annulé à ce moment-là, l'âge de Zhangsan dans la base de données est restauré à 20 , il est trop tard à ce moment-là, car le client B a déjà mis 21 pour faire des affaires.

Quel est le niveau disolement des transactions MySQL ? Les deux clients retournent et abandonnent les modifications des données effectuées par la transaction actuelle, et l'âge de Zhangsan est restauré à 20

Quel est le niveau disolement des transactions MySQL ? 3. Testez le niveau d'isolement Transaction_Read_Commit est défini sur le niveau d'isolement de lecture soumis, donc aucune lecture sale n'a eu lieu dans la transaction B. Ceci est réalisé par divers mécanismes de verrouillage et le contrôle de version MVCC de la concurrence des transactions.

Quel est le niveau disolement des transactions MySQL ?Sous le niveau d'isolement des lectures validées, l'interrogation des données validées peut provoquer des lectures non répétables, ce qui est autorisé. Étant donné que des lectures non répétables ont eu lieu, des lectures fantômes peuvent certainement se produire.

4. Testez le niveau d'isolement TRANSACTION_REPEATABLE_READ Quel est le niveau disolement des transactions MySQL ?

Quel est le niveau disolement des transactions MySQL ?

Dans un certain sens, les lectures répétables peuvent éviter l'apparition de lectures fantômes. Parce que le niveau d’isolement de lecture reproductible actuel empêche les opérations d’insertion. Bien que le niveau d'isolement de lecture répétable puisse empêcher les opérations d'insertion et de suppression, il ne peut pas empêcher les opérations de mise à jour.

Quel est le niveau disolement des transactions MySQL ?En fait, la transaction A a été insérée et soumise, aaa existe déjà, car la transaction B a mis à jour l'âge de aaa avec succès

Lorsque la même requête est exécutée deux fois avant et après, si le volume de données est différent, elle provoquera des fantômes. La lecture se produit. Pour résoudre complètement le problème de lecture fantôme, cela ne peut pas être réalisé avec le niveau d'isolement de lecture répétable. Le niveau d'isolement doit être élevé à la sérialisationQuel est le niveau disolement des transactions MySQL ?

5. Testez le niveau d'isolement TRANSACTION_SERIALIZABLE

Quel est le niveau disolement des transactions MySQL ?.

Quel est le niveau disolement des transactions MySQL ?

À en juger par le phénomène, la sérialisation peut résoudre la lecture fantôme. Lors d'une interrogation dans les mêmes conditions, l'insertion de données dans une autre table sera bloquée. Puisque la transaction B lit des données, la transaction A sera bloquée si elle écrit à nouveau des données. (implémenté avec des verrous en lecture-écriture, la lecture et la lecture sont autorisées, mais la lecture et l'écriture ne sont pas autorisées)

Le serveur MySQL ne laissera pas son propre thread exécutant les transactions être bloqué pour toujours, ce qui empêchera le verrou occupé par le thread actuel de pouvoir être libéré, provoquant l'exécution d'autres transactions. Le thread ne peut pas obtenir le verrou et est bloqué pour toujours. Si le thread exécutant la transaction attend trop longtemps, le mécanisme de délai d'attente sera déclenché, ce qui amènera le thread à libérer le verrou et à renvoyer une erreur

Quel est le niveau disolement des transactions 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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal