Was ist Phantomlesen?
Phantomlesen bedeutet, dass Transaktion A zuerst N Datenelemente basierend auf dem bedingten Index erhält und dann M Datenelemente außer diesen N Datenelementen ändert oder M Datenelemente hinzufügt erfüllen die Suchbedingungen von Transaktion A. Infolgedessen sucht Transaktion A erneut und findet N+M Datenstücke, was zu Phantomlesevorgängen führt.
Wie löst man das Phantomlesen?
Gelöst durch Next-Key-Sperre.
Der Grund für das Phantomlesen ist, dass Zeilensperren nur Zeilen sperren können. Beim Einfügen neuer Datensätze muss jedoch die „Lücke“ zwischen Datensätzen aktualisiert werden. Um Phantom-Lesevorgänge zu lösen, führt InnoDB daher Lückensperren ein.
Lückensperre Die Lückensperre ist nur auf der wiederholbaren Leseebene wirksam.
Die Kombination aus Lückensperre und Zeilensperre wird als Next-Key-Sperre bezeichnet , jede Next-Key-Sperre ist ein offenes und geschlossenes Intervall.
Unter den vier in der Datenbank definierten Isolationsstufen
kann die höchste Isolationsstufe SERIALIZABLE_READ sicherstellen, dass kein Phantomleseproblem auftritt.
Wiederholbarer Lesevorgang (RR)
Für den aktuellen Lesevorgang stellt die RR-Isolationsstufe sicher, dass der gelesene Datensatz gesperrt ist (Datensatzsperre) und der Lesebereich garantiert gesperrt ist . Neue Datensätze, die die Abfragebedingungen erfüllen, können nicht eingefügt werden (Lückensperre), und es gibt kein Phantomlesephänomen.
Empfohlenes Tutorial: „MySQL-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist Phantomlesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!