Heim  >  Artikel  >  Datenbank  >  Wie löse ich das MySQL-Phantom-Lesen?

Wie löse ich das MySQL-Phantom-Lesen?

Guanhui
GuanhuiOriginal
2020-06-18 15:39:153487Durchsuche

Wie löse ich das MySQL-Phantom-Lesen?

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!

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