Wie löse ich das MySQL-Phantomlesen?
1. MVCC-Snapshot, speichert einen Snapshot der historischen Daten und stellt sicher, dass die aktuelle Transaktion unsichtbar ist, wenn ihre Transaktion Daten hinzufügt oder löscht.
Die meisten Datenbanken verfügen über eine Parallelitätskontrolle implementiert und alles wird durch das Speichern von Daten-Snapshots erreicht.
Am Beispiel von InnoDB gibt es in jeder Zeile zwei redundante Wortumbrüche. Eine davon ist die erstellte Version der Zeile und eine ist die gelöschte (abgelaufene) Version der Zeile. Die Versionsnummer erhöht sich automatisch mit jeder Transaktion. Jedes Mal, wenn eine Transaktion Daten abruft, ruft sie Daten ab, deren Erstellungsversion kleiner als die aktuelle Transaktionsversion ist, und Daten, deren abgelaufene Version größer als die aktuelle Version ist.
Normale Auswahl ist das Lesen von Schnappschüssen.
select * from T where number = 1;
2. „Next-Key“-Sperre, sperrt die Lücke zwischen der aktuellen Datenzeile und den vorherigen Daten und den nächsten Daten, um sicherzustellen, dass die gelesenen Daten innerhalb dieses Bereichs konsistent sind.
Next-Key-Sperre besteht aus zwei Teilen
Datensatzsperre (Zeilensperre)
Lückensperre
Datensatzsperren sind Sperren, die zu Indizes hinzugefügt werden, und Lückensperren werden zwischen Indizes hinzugefügt. (Denken Sie: Was passiert, wenn es keinen Index für die Spalte gibt?)
select * from T where number = 1 for update; select * from T where number = 1 lock in share mode; insert update delete
Empfohlenes Tutorial: „MySQL-Tutorial“
Das obige ist der detaillierte Inhalt vonWie löse ich das MySQL-Phantom-Lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!