Das Internet ist bereits voll von Artikeln dieser Art, aber der Grund, warum ich ihn dennoch schreibe, ist ganz einfach: Er soll als Hinweis auf mein eigenes Verständnis dienen. Vorwort Dieser Artikel stellt mein persönliches Verständnis von MySQL dar und die verwendete Engine ist InnoDb. Lassen Sie uns zunächst über das Konzept von Transaktionen sprechen. In der dritten Ausgabe von „High Performance MySQL“ lautet die Beschreibung von Transaktionen wie folgt:
Mit anderen Worten, eine Transaktion ist eine integrale Einheit und die darin enthaltenen SQL-Anweisungen werden nicht separat ausgeführt, genau wie einige Produkte, die aus mehreren Komponenten bestehen. Ich verkaufe Komponenten jedoch auf keinen Fall separat. Wenn Sie kaufen möchten, kaufen Sie das gesamte Produkt, sonst verkaufe ich es nicht. Nach einem einfachen Verständnis von Transaktionen müssen Sie auch wissen, dass der Zweck von Transaktionen darin besteht, die Richtigkeit und Konsistenz von Daten sicherzustellen. Zu diesem Zweck sind seine vier Merkmale entstanden (mehr dazu später). Um diese vier Merkmale zu realisieren, sind viele spezifische Implementierungen erforderlich, darunter vier Isolationsebenen zur Isolierung. Diese vier Isolationsebenen haben drei Probleme verursacht (Dirty Reads, nicht wiederholbare Reads und Phantom Reads). Dies ist die allgemeine Beziehung. Schauen wir uns als Nächstes an, was diese sind. 1 Vier Eigenschaften (ACID) Wenn wir über Transaktionseigenschaften sprechen, fällt uns sicherlich als Erstes ACID ein. Doch neben den vier Buchstaben ACID müssen wir noch über etwas anderes sprechen. Atomarität: Das bedeutet, dass eine Transaktion als unteilbare Kleinsteinheit behandelt werden sollte. Die Operationen der gesamten Transaktion werden entweder alle erfolgreich ausgeführt oder überhaupt nicht ausgeführt, genau wie Atome. (Erwähnen Sie mir gegenüber nichts von Quarks.) Die Ausführung bezieht sich hier auf die erfolgreiche Ausführung. Wenn eine Operation fehlschlägt, wird keine davon ausgeführt. Dies ist auch das Rollback, das wir normalerweise sehen. Konsistenz: Die im Buch gegebene Bedeutung ist, dass Transaktionen immer von einem konsistenten Zustand in einen anderen konsistenten Zustand springen. Nach meinem Verständnis bleibt es innerhalb des betreffenden Datenbereichs erhalten, d. h. die Gesamtdaten bleiben unverändert. Nehmen wir das allgemeine Beispiel einer Geldüberweisung. Konto A überweist 200 Yuan auf Konto B. Dann hat sich der aus A und B bestehende Datenbereich nicht geändert (-200 + 200 = 0), aber die Zusammensetzung der Daten hat sich geändert, sodass es von einem konsistenten Zustand zu einem anderen konsistenten Zustand kommt. Isolation: Generell sind die Operationen einer Transaktion für andere Transaktionen nicht sichtbar, das heißt, die Transaktionen sind grundsätzlich unabhängig. Dies hängt jedoch mit der Isolationsstufe der Datenbank zusammen. Mit Ausnahme einer bestimmten Isolationsstufe (ja, das sind Sie – lesen Sie nicht festgeschriebenen Klassenkameraden) sind die anderen unsichtbar, und diese Ebene der Transaktionssichtbarkeit wird selten verwendet, daher wird sie „allgemein gesprochen“ genannt. Dauerhaftigkeit: Sobald eine Transaktion abgeschlossen ist, werden die durch die Transaktion verursachten Datenänderungen dauerhaft wirksam und ändern sich nicht (sofern sie nicht durch eine andere Transaktion geändert werden). Im Buch wird jedoch erwähnt, dass dies tatsächlich mit der Implementierungsstrategie zusammenhängt, aber das scheint etwas weit hergeholt (ja, ich verstehe das nicht!). Das Obige sind die vier Merkmale von Transaktionen. Die Implementierung der Isolation hängt von der Isolationsstufe der Datenbank ab. 2 Datenbankisolationsebene In MySQL gibt es vier Isolationsebenen. Jede Isolationsebene entspricht unterschiedlichen Transaktionen und kann unterschiedliche Probleme verursachen. Nicht festgeschriebenes Lesen: Auf dieser Isolationsebene können in einer Transaktion ausgeführte Vorgänge von anderen Transaktionen gesehen werden, auch wenn sie nicht festgeschrieben sind. Auf dieser Ebene kann eine Transaktion fehlerhafte Daten lesen, die nicht von anderen Transaktionen festgeschrieben wurden. Das heißt, es kann zu fehlerhaften Lesevorgängen kommen. Wie in der folgenden Abbildung gezeigt, geben die Sequenznummern die Ausführungsreihenfolge an. Wie Sie sehen, werden in der Transaktion auf Seite 1 Daten in die Testtabelle eingefügt. Auch wenn diese noch nicht übermittelt wurden, sind die übermittelten Daten in einer weiteren Transaktion auf Seite 2 zu sehen. Festgeschriebenes Lesen: Nachdem eine Transaktion festgeschrieben wurde, können andere Transaktionen die an der Transaktion vorgenommenen Änderungen sehen. Diese Isolationsebene kann dazu führen, dass dieselbe Abfrage in derselben Transaktion ausgeführt wird, aber unterschiedliche Daten gelesen werden. Dies wird als nicht wiederholbares Lesen bezeichnet. Nicht wiederholbares Lesen kann auch bei nicht festgeschriebenen Lesevorgängen auftreten. Beispiele sind wie folgt Wiederholbares Lesen: Dies ist die Standardisolationsstufe von MySQL. Zu Beginn einer Transaktion wird ein Snapshot gespeichert (hier werde ich genauer darauf eingehen. Tatsächlich handelt es sich um einen Snapshot, der erstellt wird, wenn die erste Anweisung nach dem Start der Transaktion ausgeführt wird. Die Methode zum Erstellen des Snapshots besteht darin, die Versionsnummer der aktuellen Transaktion aufzuzeichnen. Es werden keine Daten kopiert. Wenn Sie die Versionsnummer der Transaktion oder die ausgeblendeten Felder nicht verstehen, können Sie sich MySQLs MVCC ansehen.) Dann werden alle nachfolgenden Datenlesevorgänge dieser Transaktion aus diesem Snapshot gelesen, sodass es keine nicht wiederholbaren Lesevorgänge gibt, aber Phantomlesevorgänge können dennoch auftreten. Dies bedeutet, dass sich die Daten der Snapshot-Tabelle beim Lesen nicht ändern, die Anzahl der Aktualisierungen bei Schreibvorgängen wie Updates jedoch von der erwarteten Anzahl abweichen kann. Wie gezeigt Es ist ersichtlich, dass Schnittstelle 2 die übermittelten Daten immer noch nicht lesen kann, nachdem ein Datensatz in Schnittstelle 1 eingefügt und übermittelt wurde, da sie zu Beginn der Transaktion aus der Snapshot-Tabelle gelesen wurden und daher natürlich nicht gelesen werden können. Wenn jedoch der Aktualisierungsvorgang ausgeführt wird, werden unerwartete Datensätze aktualisiert. Dies ist ein Phantomlesephänomen. Serialisierbar: Dies bedeutet, dass Transaktionen einzeln verarbeitet werden müssen. Wenn in einer Transaktion ein Lesevorgang ausgeführt wird, können andere Transaktionen nur Lesevorgänge ausführen, bevor die Transaktion abgeschlossen ist. Wenn ein Schreibvorgang ausgeführt wird, warten die Vorgänge anderer Transaktionen (bis die aktuelle Transaktion festgeschrieben ist). Diese Ebene kann aktuelle Phänomene wie Dirty Reads, nicht wiederholbare Reads und Phantom Reads verhindern. Wie gezeigt Die obige Abbildung zeigt, dass beim Lesen einer Transaktion andere Transaktionen nicht schreiben können. Die folgende Abbildung zeigt, dass beim Schreiben keine Operationen möglich sind. 3 Drei Probleme: Dirty Reads, nicht wiederholbare Reads und Phantom Reads. Dies sind einige der Probleme, die durch die Verwendung unterschiedlicher Isolationsebenen von Transaktionen entstehen können. Die Isolationsebenen wurden oben bereits erwähnt, werden aber dennoch separat aufgeführt, um Verwirrung zu vermeiden.
Lassen Sie mich den Unterschied zwischen nicht wiederholbaren Lesevorgängen und Phantomlesevorgängen erklären: Nicht wiederholbare Lesevorgänge können als Änderungen im Feldwert dieses Datensatzes verstanden werden, beispielsweise sind die beiden Werte des Namens im Datensatz mit der ID 1 unterschiedlich; während Phantomlesevorgänge Unterschiede in der Menge darstellen, beispielsweise sind bei meiner Abfrage insgesamt 2 Datensätze vorhanden, aber wenn ich den Änderungsvorgang durchführe, werden 3 Datensätze aktualisiert. Oben sind die Details zu den Merkmalen und Isolationsstufen von MySQL-Transaktionen aufgeführt. Weitere Informationen zu den Merkmalen und Isolationsstufen von MySQL-Transaktionen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erklärung zur Verwendung der Vue-Komponente zur Kennzeichensuche
>>: Verwendung des Linux-Telnet-Befehls
In diesem Artikelbeispiel wird der spezifische Co...
Vorwort Das langsame Abfrageprotokoll ist eine se...
So verwenden Sie die Concat-Funktion in MySQL: CO...
#1. Herunterladen # #2. Entpacken Sie die Datei l...
Inhaltsverzeichnis Horizontales Balkendiagramm Da...
Es gibt ein auf dem Mac entwickeltes Projekt, das...
Da die Version, die ich beim Lernen verwendet hab...
Einführung Unser Unternehmen ist an der Forschung...
Datenbank MySQL Version 8.0.18 Laden Sie eine DBe...
Inhaltsverzeichnis Überblick Warum ein Framework ...
Inhaltsverzeichnis Vorwort 1. Setzen Sie den Prot...
1. Bereiten Sie zunächst die MySQL- und Eclipse-U...
1. Im Web unterstützte Bildformate: GIF: kann 256...
Jenkins ist ein Open-Source-Softwareprojekt. Es h...
Inhaltsverzeichnis 1. Paradigmenfundament 1.1 Der...