Maison > base de données > tutoriel mysql > Quelle est la différence entre une lecture fantôme et une lecture non répétable ?

Quelle est la différence entre une lecture fantôme et une lecture non répétable ?

王林
Libérer: 2020-06-05 15:28:01
original
9907 Les gens l'ont consulté

Quelle est la différence entre une lecture fantôme et une lecture non répétable ?

Différence :

Lecture non répétable : Dans les mêmes conditions, la valeur des données lues changera lorsque nous les lirons à nouveau. .

Lecture fantôme : dans les mêmes conditions, le nombre d'enregistrements lus pour la première et la deuxième fois est différent.

Analyse détaillée :

1. Lecture non répétable

Dans les mêmes conditions, la valeur des données lues sera la même lorsque nous relisez-le. Quelque chose a changé.

Exemple :

Dans la transaction 1, A lit son salaire comme étant de 1000, mais l'opération de la transaction 1 n'est pas terminée à ce moment-là, et il y a une autre lecture identique plus tard.

con1 = getConnection();
select salary from employee where employeeName ="A";
Copier après la connexion

Dans la transaction 2, le personnel financier a modifié le salaire de A à 2000 et a soumis la transaction.

con2 = getConnection();    
update employee set salary = 2000 where employeeName = "A";    
con2.commit();
Copier après la connexion

Dans la transaction 1, lorsque A relit son salaire, le salaire devient 2000.

select salary from employee where employeeName ="A";
Copier après la connexion

Les résultats de deux lectures dans une transaction sont incohérents, ce qui entraîne des lectures non répétables.

2. Lecture fantôme

Dans les mêmes conditions, le nombre d'enregistrements lus pour la première et la deuxième fois est différent.

Exemple :

Il y a actuellement 5 employés avec un salaire de 1 000.

Transaction 1, lisez tous les employés avec un salaire de 1 000 et lisez un total de 10 enregistrements.

con1 = getConnection();    
Select * from employee where salary =1000;
Copier après la connexion

À ce moment-là, une autre transaction a inséré un enregistrement d'employé dans la table des employés, et le salaire était également de 1 000

con2 = getConnection();    
Insert into employee(employeeName,salary) values("B",1000);    
con2.commit();
Copier après la connexion

La transaction 1 a lu à nouveau tous les employés avec un salaire de 1 000, et un. au total, 6 enregistrements ont été lus. Record, ce qui crée une lecture fantôme.

//con1    
select * from employee where salary =1000;
Copier après la connexion

Tutoriel 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!

Étiquettes associées:
source:php.cn
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