Heim  >  Artikel  >  Datenbank  >  Was ist der Unterschied zwischen Phantom-Read und nicht wiederholbarem Read?

Was ist der Unterschied zwischen Phantom-Read und nicht wiederholbarem Read?

王林
王林Original
2020-06-05 15:28:019801Durchsuche

Was ist der Unterschied zwischen Phantom-Read und nicht wiederholbarem Read?

Unterschied:

Nicht wiederholbares Lesen: Unter den gleichen Bedingungen ändert sich der Wert der gelesenen Daten, wenn wir sie erneut lesen .

Phantomlesung: Unter gleichen Bedingungen ist die Anzahl der beim ersten und zweiten Mal ausgelesenen Datensätze unterschiedlich.

Detaillierte Analyse:

1. Nicht wiederholbares Lesen

Unter den gleichen Bedingungen ist der Wert der gelesenen Daten derselbe, wenn wir Lesen Sie es noch einmal. Etwas hat sich geändert.

Beispiel:

In Transaktion 1 liest A sein Gehalt als 1000, aber der Vorgang von Transaktion 1 ist zu diesem Zeitpunkt noch nicht abgeschlossen und es gibt später einen weiteren identischen Lesevorgang.

con1 = getConnection();
select salary from employee where employeeName ="A";

In Transaktion 2 änderte das Finanzpersonal das Gehalt von A auf 2000 und reichte die Transaktion ein.

con2 = getConnection();    
update employee set salary = 2000 where employeeName = "A";    
con2.commit();

Wenn A in Transaktion 1 sein Gehalt erneut liest, beträgt das Gehalt 2000.

select salary from employee where employeeName ="A";

Die Ergebnisse von zwei Lesevorgängen in einer Transaktion sind inkonsistent, was zu nicht wiederholbaren Lesevorgängen führt.

2. Phantomlesung

Unter den gleichen Bedingungen ist die Anzahl der ausgelesenen Datensätze beim ersten und zweiten Mal unterschiedlich.

Beispiel:

Es gibt derzeit 5 Mitarbeiter mit einem Gehalt von 1.000.

Transaktion 1: Lesen Sie alle Mitarbeiter mit einem Gehalt von 1.000 und lesen Sie insgesamt 10 Datensätze.

con1 = getConnection();    
Select * from employee where salary =1000;

Zu diesem Zeitpunkt wurde durch eine andere Transaktion ein Mitarbeiterdatensatz in die Mitarbeitertabelle eingefügt, und das Gehalt betrug ebenfalls 1.000

con2 = getConnection();    
Insert into employee(employeeName,salary) values("B",1000);    
con2.commit();

Transaktion 1 las erneut alle Mitarbeiter mit einem Gehalt von 1.000 Insgesamt wurden 6 Datensätze gelesen, wodurch eine Phantomlesung entsteht.

//con1    
select * from employee where salary =1000;

Empfohlenes Tutorial: MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Phantom-Read und nicht wiederholbarem Read?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn