Maison  >  Article  >  base de données  >  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 ?

王林
王林original
2020-06-05 15:28:019801parcourir

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";

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();

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

select salary from employee where employeeName ="A";

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;

À 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();

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;

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!

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