Ist virtuelles Lesen nicht wiederholbares Lesen?
Virtuelles Lesen und nicht wiederholbares Lesen sind unterschiedlich.
Dirty Reads Dirty Reads: Dieses Ereignis tritt auf, wenn eine Transaktion Daten liest, die noch nicht festgeschrieben wurden. Beispiel: Transaktion 1 ändert eine Datenzeile und dann liest Transaktion 2 die geänderte Zeile, bevor Transaktion 1 den Änderungsvorgang festschreibt. Wenn Transaktion 1 den Änderungsvorgang rückgängig macht, können die von Transaktion 2 gelesenen Daten als nie vorhanden angesehen werden.
Nicht wiederholbare Lesevorgänge: Dieses Ereignis tritt auf, wenn eine Transaktion dieselbe Datenzeile zweimal liest, die erhaltenen Daten jedoch jedes Mal unterschiedlich sind. Beispiel: Transaktion 1 liest eine Datenzeile, dann ändert oder löscht Transaktion 2 die Zeile und sendet den Änderungsvorgang. Wenn Transaktion 1 versucht, die Zeile erneut zu lesen, erhält sie andere Datenwerte (wenn die Zeile aktualisiert wurde) oder stellt fest, dass die Zeile nicht mehr vorhanden ist (wenn die Zeile gelöscht wurde).
Phantomlesung: Dieses Ereignis tritt auf, wenn in einem nachfolgenden Lesevorgang eine Datenzeile erscheint, die die Suchbedingungen erfüllt, die Datenzeile jedoch nicht zu den Originaldaten gehört. Beispiel: Transaktion 1 liest einige Zeilen, die eine bestimmte Suchbedingung erfüllen, und dann fügt Transaktion 2 eine neue Zeile ein, die der Suchbedingung von Transaktion 1 entspricht. Wenn Transaktion 1 die Abfrage, die die ursprünglichen Zeilen erzeugt hat, erneut ausführt, erhält sie andere Zeilen.
Das Transaktionsszenario sieht wie folgt aus:
Auf demselben Bankkonto A befinden sich 200 Yuan, A hebt 100 Yuan ab und B überweist 100 Yuan auf Konto B. Wenn die Transaktion nicht isoliert ist, können die folgenden Probleme auftreten:
1 Die erste Art der verlorenen Aktualisierung: Erstens befinden sich 200 Yuan auf dem Konto, wenn A Geld abhebt, und B Überweist 200 Yuan, und dann führen A und B gleichzeitig eine Operation durch. Wenn 100 Yuan erfolgreich abgehoben werden, schlägt die Operation von B fehl und der Endbetrag auf dem Konto beträgt 200 Yuan überschrieben und die Bank verliert 100 Yuan.
2. Schmutzige Lektüre: A hebt 100 Yuan ab, reicht sie aber nicht ein und stellt fest, dass noch 100 Yuan auf dem Konto sind Übergibt den normalen Vorgang und der Endbetrag auf dem Konto beträgt 0 Yuan. B liest die schmutzigen Daten von A und der Kunde verliert 100 Yuan.
3. Virtuelles Lesen: Ähnlich wie beim schmutzigen Lesen wird das Leseproblem während des Einfügevorgangs behoben. Beispielsweise wird die Einzahlung C von 100 Yuan zu diesem Zeitpunkt nicht eingereicht Für eine statistische Untersuchung beträgt der Kontostand 200 Yuan, und dann hat C ihn eingereicht. Zu diesem Zeitpunkt stellte die Bank fest, dass der Kontostand 300 Yuan betrug. Sie konnte nicht bestimmen, welcher als Basis verwendet werden sollte.
Jeder scheint zu glauben, dass Statistiken von Zeit zu Zeit aktualisiert werden müssen, was jedoch nicht normal ist, wenn sich die Statistiken in einer Transaktion befinden. Beispielsweise muss eine unserer Statistikanwendungen die Statistiken trennen Ergebnisse. Um die Leistung und die Benutzerreaktion zu verbessern, werden die statistischen Daten zunächst in zwei Threads ausgegeben und später abgeschlossen werden, können inkonsistent sein, daher weiß ich nicht, welches sich durchsetzen sollte.
4. Nicht wiederholbare Lesung: Zur gleichen Zeit stellten A und B fest, dass sich auf dem Konto zunächst 100 Yuan befanden, und reichten zu diesem Zeitpunkt eine weitere Abfrage ein Nachdem ich die endgültige Aktualisierung vorbereitet und festgestellt habe, dass das Ergebnis 100 Yuan war, wird B sehr verwirrt sein und nicht wissen, ob er das Konto auf 100 oder 0 ändern soll. Der Unterschied zwischen
und Dirty Reading besteht darin, dass Dirty Reading die nicht festgeschriebenen Dirty-Daten der vorherigen Transaktion liest, während beim nicht wiederholbaren Lesen die Daten erneut gelesen werden, die von der vorherigen Transaktion übermittelt wurden.
Die zweite Art der verlorenen Aktualisierung: Es handelt sich um einen Sonderfall des nicht wiederholbaren Lesens. Wie oben führt B keine zweite Abfrage durch, sondern schließt den Vorgang direkt ab Yuan, und die Operation von A wird überschrieben. Wenn sie fällt, verliert die Bank 100 Yuan. Es fühlt sich ähnlich an wie die erste Art von verlorenem Update.
Das obige ist der detaillierte Inhalt vonBedeutet virtuelles Lesen nicht wiederholbares Lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!