Heim  >  Artikel  >  Datenbank  >  Der Unterschied zwischen Phantom-Lesen und nicht wiederholbarem Lesen

Der Unterschied zwischen Phantom-Lesen und nicht wiederholbarem Lesen

藏色散人
藏色散人Original
2020-05-13 10:03:086383Durchsuche

Der Unterschied zwischen Phantom-Lesen und nicht wiederholbarem Lesen

Der Unterschied zwischen Phantom-Lesung und nicht wiederholbarem Lesen

1) „Nicht wiederholbares Lesen“ bezieht sich auf das mehrmalige Lesen desselben Lesevorgangs innerhalb einer Transaktionsdaten. Bevor diese Transaktion endet, greift auch eine andere Transaktion auf dieselben Daten zu. Dann können zwischen den beiden Lesevorgängen der Daten in der ersten Transaktion aufgrund der Änderung der zweiten Transaktion die von der ersten Transaktion zweimal gelesenen Daten unterschiedlich sein. Auf diese Weise sind die innerhalb einer Transaktion zweimal gelesenen Daten unterschiedlich und werden daher als nicht wiederholbares Lesen bezeichnet.

Zum Beispiel liest ein Redakteur dasselbe Dokument zweimal, aber zwischen den Lesevorgängen schreibt der Autor das Dokument neu. Wenn der Redakteur das Dokument ein zweites Mal liest, hat sich das Dokument geändert. Rohlesevorgänge sind nicht wiederholbar. Dieses Problem kann vermieden werden, wenn der Redakteur das Dokument erst dann lesen kann, wenn der Autor mit dem Schreiben fertig ist.

Um diese Situation zu vermeiden, können Sie normalerweise die Isolationsstufe mit „set tran isolation level wiederholbar lesen“ festlegen, sodass Transaktion A ausgeführt werden kann Die Daten in Tabelle T werden zweimal gelesen. Wenn Transaktion B versucht, die Daten in Tabelle T zu ändern (die Details sind, wenn Transaktion A die Daten liest), wird sie blockiert, bis Transaktion A festgeschrieben wird! Dadurch wird die Konsistenz der von Transaktion A zweimal gelesenen Daten sichergestellt.

2) Phantom-Lesen bezieht sich auf ein Phänomen, das auftritt, wenn Transaktionen nicht unabhängig voneinander ausgeführt werden. Beispielsweise ändert die erste Transaktion die Daten in einer Tabelle und diese Änderung betrifft alle Datenzeilen in der Tabelle. Gleichzeitig werden durch die zweite Transaktion auch die Daten in dieser Tabelle geändert. Durch diese Änderung wird eine Zeile mit neuen Daten in die Tabelle eingefügt.

Dann wird der Benutzer, der die erste Transaktion durchführt, feststellen, dass die Tabelle immer noch unveränderte Datenzeilen enthält, als ob er halluzinieren würde.

Zum Beispiel ändert ein Redakteur ein von einem Autor eingereichtes Dokument, aber wenn die Produktion seine Änderungen in die Masterkopie des Dokuments einfügt, wird festgestellt, dass der Autor dem Dokument neues, unbearbeitetes Material hinzugefügt hat. Dieses Problem kann vermieden werden, wenn niemand neues Material zum Dokument hinzufügen kann, bis die Redakteure und die Produktionsabteilung die Arbeit am Originaldokument abgeschlossen haben.

Im obigen Beispiel muss Transaktion A die Daten in Tabelle T zweimal lesen. Obwohl die Einstellung des wiederholbaren Lesens verhindern kann, dass Transaktion B die Daten ändert, kann Transaktion B neue Daten in Tabelle T einfügen.

Um dieses Problem zu verhindern, können wir in Betracht ziehen, die höchste Transaktionsisolationsstufe festzulegen und die trans-Isolationsstufe serialisierbar festzulegen. Infolgedessen kann Transaktion B nur gehorsam auf die Übermittlung von Transaktion A warten, bevor sie neue Daten in Tabelle T einfügt, wodurch Phantomlesevorgänge vermieden werden!

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Phantom-Lesen und nicht wiederholbarem Lesen. 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