Maison > Article > base de données > La différence entre la lecture fantôme et la lecture non répétable
La différence entre la lecture fantôme et la lecture non répétable
1) "Lecture non répétable" fait référence à la lecture de la même lecture plusieurs fois dans les données d'une transaction. Avant la fin de cette transaction, une autre transaction accède également aux mêmes données. Ensuite, entre les deux lectures de données de la première transaction, du fait de la modification de la deuxième transaction, les données lues deux fois par la première transaction peuvent être différentes. De cette façon, les données lues deux fois au sein d’une transaction sont différentes, on parle donc de lecture non répétable.
Par exemple, un éditeur lit deux fois le même document, mais entre les lectures, l'auteur réécrit le document. Lorsque l'éditeur lit le document une seconde fois, le document a changé. Les lectures brutes ne sont pas reproductibles. Ce problème peut être évité si les éditeurs ne peuvent lire le document qu'une fois que l'auteur a fini d'écrire
Pour éviter cette situation, vous pouvez généralement définir le niveau d'isolement avec un niveau d'isolement de tran répétable en lecture, de sorte que la transaction A lorsque En lisant les données du tableau T deux fois, si la transaction B tente de modifier les données du tableau T (les détails sont lorsque la transaction A lit les données), elle sera bloquée jusqu'à ce que la transaction A soit validée ! Cela garantit la cohérence des données lues deux fois par la transaction A.
2) La lecture fantôme fait référence à un phénomène qui se produit lorsque les transactions ne sont pas exécutées indépendamment. Par exemple, la première transaction modifie les données d'une table, et cette modification implique toutes les lignes de données de la table. Parallèlement, la deuxième transaction modifie également les données de cette table. Cette modification insère une ligne de nouvelles données dans la table.
Ensuite, l'utilisateur qui effectue la première transaction constatera qu'il y a encore des lignes de données non modifiées dans le tableau, comme s'il hallucinait.
Par exemple, un éditeur modifie un document soumis par un auteur, mais lorsque la production fusionne ses modifications dans la copie principale du document, on découvre que l'auteur a ajouté du nouveau matériel non édité au document. Ce problème peut être évité si personne ne peut ajouter de nouveaux éléments au document tant que les éditeurs et le service de production n'ont pas fini de travailler sur le document original.
Toujours avec l'exemple ci-dessus, la transaction A doit lire les données de la table T deux fois. Bien que la définition d'une lecture répétable puisse empêcher la transaction B de modifier les données, la transaction B peut insérer de nouvelles données dans la table T. .
Comment éviter ce problème, nous pouvons envisager de définir le niveau d'isolation de transaction le plus élevé défini comme le niveau d'isolation tran sérialisable. En conséquence, la transaction B ne peut qu'attendre docilement que la transaction A soit soumise avant d'insérer de nouvelles données dans la table T, évitant ainsi les lectures fantômes !
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!