Dieser Artikel bietet Ihnen eine Einführung in die vier Isolationsstufen in MySQL. Ich hoffe, dass er für Freunde hilfreich ist.
Transaktionsisolation ist komplizierter als gedacht. Im SQL-Standard sind vier Isolationsstufen definiert. Im Allgemeinen können niedrigere Isolationsstufen in der Regel zu höherer Parallelität und geringerem Systemaufwand führen (empfohlene Kurse: MySQL-Video-Tutorial)
READ UNCOMMITTED
Das Level ist Uncommitted Read. Auf dieser Ebene sind Änderungen in einer Transaktion für andere Transaktionen sichtbar, auch wenn sie nicht festgeschrieben sind. Transaktionen können nicht festgeschriebene Daten lesen, was auch als Dirty Read bekannt ist. Dieses Level verursacht viele Probleme. In Bezug auf die Leistung ist es nicht viel besser als die anderen Level, aber es fehlen viele Vorteile der anderen Level. Sofern es keinen unbedingt notwendigen Grund gibt, wird es in praktischen Anwendungen selten verwendet.
READ COMMITTED
Diese Ebene ist Commit Read. Dies ist die Standardisolationsstufe für die meisten Datenbanksysteme, nicht jedoch für MySQL. Diese Ebene entspricht der einfachen Definition von Isolation: Wenn eine Transaktion beginnt, können nur Änderungen, die von festgeschriebenen Transaktionen vorgenommen wurden, „gesehen“ werden. Mit anderen Worten: Alle von einer Transaktion vom Anfang bis zum Commit vorgenommenen Änderungen sind für andere Transaktionen nicht sichtbar. Diese Ebene wird manchmal als Nicht wiederholbares Lesen bezeichnet, da die zweimalige Ausführung derselben Abfrage zu unterschiedlichen Ergebnissen führen kann.
REPEATABLE READ
Diese Stufe ist Repeatable Read, was die Standard-Transaktionsisolationsstufe von MySQL ist. Es löst das Problem des schmutzigen Lesens und stellt sicher, dass die Ergebnisse beim mehrmaligen Lesen desselben Datensatzes in derselben Transaktion konsistent sind.
Aber theoretisch kann dieses Level ein anderes Problem nicht lösen: Phantomlesen. Der sogenannte Phantom-Read bedeutet, dass eine andere Transaktion einen neuen Datensatz in den Bereich einfügt, wenn die vorherige Transaktion die Datensätze im Bereich erneut liest. Dies führt zu einer Halluzination .
Phantom-Lesebeispiel: Die erste Transaktion ändert die Daten in einer Tabelle. Diese Änderung betrifft beispielsweise „alle Datenzeilen“ in der Tabelle. Gleichzeitig werden durch die zweite Transaktion auch die Daten in dieser Tabelle geändert. Diese Änderung besteht darin, „eine Zeile mit neuen Daten“ in die Tabelle einzufügen. Dann wird der Benutzer, der die erste Transaktion ausführt, in Zukunft feststellen, dass die Tabelle immer noch unveränderte Datenzeilen enthält, als ob eine Halluzination aufgetreten wäre
Die InnoDB-Speicher-Engine löst Phantom-Lesevorgänge durch mehrere Versionen Problem der Parallelitätskontrolle.
SERIALISIERBAR
Diese Ebene ist serialisierbar und stellt die höchste Isolationsebene dar. Es vermeidet das zuvor erwähnte Phantomleseproblem, indem es die serielle Ausführung von Transaktionen erzwingt. Kurz gesagt, diese Ebene sperrt jede Zeile der gelesenen Daten, sodass es zu vielen Zeitüberschreitungen und Sperrkonfliktproblemen kommen kann.
Diese Isolationsstufe wird in tatsächlichen Anwendungen selten verwendet. Diese Stufe sollte nur in Betracht gezogen werden, wenn es unbedingt erforderlich ist, die Datenkonsistenz sicherzustellen, und keine Parallelität akzeptabel ist.
隔离级别 | 脏读可能性 | 不可重复读可能性 | 幻读可能性 | 加锁读 |
---|---|---|---|---|
READ UNCOMMITTED | Yes | Yes | Yes | No |
READ COMMITTED | No | Yes | Yes | No |
REPEATABLE READ | No | No | Yes | No |
SERIALIZABLE | No | No | No | Yes |
Das obige ist der detaillierte Inhalt vonEinführung in die vier Isolationsstufen in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!