Detaillierte Erklärung der Transaktionen und Indizes in der MySQL-Datenbank

Detaillierte Erklärung der Transaktionen und Indizes in der MySQL-Datenbank

1. Angelegenheiten:

Eine Transaktion ist eine logische Reihe von Operationen, die entweder alle erfolgreich sind oder alle fehlschlagen.

——————————————————————————————————

1. SQL-Ausführung A: 1000 Yuan ——> 200 Yuan überweisen B: 200 Yuan

2. SQL-Ausführung A: 800 Yuan ——> B: 400 Yuan

——————————————————————————————————

Führen Sie eine Gruppe von SQL-Anweisungen in einem Batch aus

Vier Hauptmerkmale von Transaktionen:

ACID-Prinzipien

1. Atomarität : Eine Transaktion ist die kleinste Ausführungseinheit und kann nicht aufgeteilt werden. Die Atomarität von Transaktionen stellt sicher, dass Aktionen entweder vollständig abgeschlossen werden oder überhaupt keine Auswirkungen haben.


2. Konsistenz: Die Daten bleiben vor und nach der Ausführung der Transaktion konsistent, und die Ergebnisse mehrerer Transaktionen, die dieselben Daten lesen, sind dieselben.


3. Isolierung : Beim gleichzeitigen Zugriff auf die Datenbank werden die Transaktionen eines Benutzers nicht durch andere Transaktionen gestört und die Datenbanken zwischen gleichzeitigen Transaktionen sind unabhängig.


4. Dauerhaftigkeit : Nachdem eine Transaktion bestätigt wurde. Die an den Daten in der Datenbank vorgenommenen Änderungen sind dauerhaft und sollten auch bei einem Datenbankausfall nicht beeinträchtigt werden. --------Transaktions-Commit

Welche Probleme bringen gleichzeitige Transaktionen mit sich? (Einige Probleme werden durch die Isolation verursacht)

In einer typischen Anwendung werden mehrere Transaktionen gleichzeitig ausgeführt, die häufig mit denselben Daten arbeiten, um ihre jeweiligen Aufgaben abzuschließen (mehrere Benutzer arbeiten mit denselben Daten). Obwohl Parallelität erforderlich ist, kann sie zu den folgenden Problemen führen.

Dirty Read : Wenn eine Transaktion auf Daten zugreift und diese ändert und diese Änderung nicht in der Datenbank übernommen wurde, greift eine andere Transaktion ebenfalls auf die Daten zu und verwendet sie dann. Da diese Daten nicht festgeschrieben wurden, handelt es sich bei den von einer anderen Transaktion gelesenen Daten um „schmutzige Daten“, und die auf der Grundlage dieser „schmutzigen Daten“ ausgeführten Vorgänge können fehlerhaft sein.


Verloren beim Ändern: Wenn eine Transaktion Daten liest, greift eine andere Transaktion ebenfalls auf diese Daten zu. Nachdem die Daten dann in der ersten Transaktion geändert wurden, werden sie auch von der zweiten Transaktion geändert. Auf diese Weise gehen die Änderungsergebnisse der ersten Transaktion verloren, daher spricht man von einer verlorenen Änderung. Beispiel: Transaktion 1 liest Daten A=20 in einer Tabelle, Transaktion 2 liest auch A=20, Transaktion 1 ändert A=A-1, Transaktion 2 ändert auch A=A-1, das Endergebnis ist A=19 und die Änderung von Transaktion 1 geht verloren.

Nicht wiederholbares Lesen: bezieht sich auf das mehrmalige Lesen derselben Daten innerhalb einer Transaktion. Bevor diese Transaktion beendet wird, greift auch eine weitere Transaktion auf die Daten zu. Dann können zwischen den beiden Lesevorgängen in der ersten Transaktion die von der ersten Transaktion zweimal gelesenen Daten aufgrund der Änderung der zweiten Transaktion unterschiedlich sein. Dies bedeutet, dass die in einer Transaktion zweimal gelesenen Daten unterschiedlich sind; deshalb spricht man vom nicht wiederholbaren Lesen.


Phantomlesen: Phantomlesen ist dem nicht wiederholbaren Lesen ähnlich. Dies geschieht, wenn eine Transaktion (T1) einige Datenzeilen liest und dann eine andere gleichzeitige Transaktion (T2) einige Daten einfügt. In nachfolgenden Abfragen findet die erste Transaktion (T1) wie eine Illusion einige zusätzliche Datensätze, die ursprünglich nicht vorhanden waren. Dies wird daher als Phantomlesen bezeichnet.

Der Unterschied zwischen nicht wiederholbarem Lesen und Phantomlesen;

Der Schwerpunkt nicht wiederholbarer Lesevorgänge liegt auf Änderungen, z. B. wenn ein Datensatz mehrmals gelesen wird und festgestellt wird, dass die Werte einiger Spalten geändert wurden. Der Schwerpunkt von Phantomlesevorgängen liegt auf dem Hinzufügen oder Löschen, z. B. wenn ein Datensatz mehrmals gelesen wird und festgestellt wird, dass die Anzahl der Datensätze zugenommen oder abgenommen hat.

Was sind die Transaktionsisolationsebenen?

READ-UNCOMMITTED UNCOMMITTED: Die niedrigste Isolationsebene, die das Lesen von Datenänderungen ermöglicht, die noch nicht festgeschrieben wurden, was zu Dirty Reads, Phantom Reads oder nicht wiederholbaren Lesevorgängen führen kann.

READ-COMMITTED : Ermöglicht das Lesen von Daten, die durch gleichzeitige Transaktionen festgeschrieben wurden. Dadurch können Dirty Reads verhindert werden, es können jedoch weiterhin Phantom-Lesevorgänge oder nicht wiederholbare Lesevorgänge auftreten.

REPEATABLE REPEATABLE-READ( ): Die Ergebnisse mehrerer Lesevorgänge desselben Felds sind konsistent, sofern die Daten nicht durch die Transaktion selbst geändert werden. Dirty Reads und nicht wiederholbare Lesevorgänge können verhindert werden, aber Phantom-Lesevorgänge können trotzdem auftreten.

SERIALIZABLE( : Die höchste Isolationsstufe, vollständig kompatibel mit den ACID-Isolationsstufen. Alle Transaktionen werden nacheinander ausgeführt, sodass es zu keinen Interferenzen zwischen den Transaktionen kommen kann. Mit anderen Worten: Diese Ebene kann Dirty Reads, nicht wiederholbare Reads und Phantom Reads verhindern.

Standardisolationsebene von MySQL:

Die von der MySQL InnoDB-Speicher-Engine unterstützte Standardisolationsebene ist REPEATABLE-READ (wieder lesbar). Wir können es über den Befehl SELECT@@tx_isolation; anzeigen.

2. Inhaltsverzeichnis:

Die offizielle Definition eines Indexes von MySQL lautet: Ein Index ist eine Datenstruktur, die MySQL dabei hilft, Daten effizient abzurufen. Indem wir den Hauptstamm des Satzes extrahieren, können wir die Essenz des Index erhalten: Der Index ist eine Datenstruktur.

Zu den von MySQL-Indizes verwendeten Datenstrukturen gehören hauptsächlich BTree-Indizes und Hash-Indizes. Bei Hash-Indizes ist die zugrunde liegende Datenstruktur eine Hash-Tabelle. Wenn die meisten Anforderungen Einzeldatensatzabfragen betreffen, können daher Hash-Indizes ausgewählt werden, die die schnellste Abfrageleistung bieten. Für die meisten anderen Szenarien werden BTree-Indizes empfohlen.

Der BTree-Index von MySQL verwendet den B+Tree im B-Baum, aber die Implementierungsmethoden für die beiden wichtigsten Speicher-Engines sind unterschiedlich.

MyISAM: Das Datenfeld des B+Tree-Blattknotens speichert die Adresse des Datensatzes. Beim Indexabruf wird der Index zunächst nach dem B+Tree-Suchalgorithmus durchsucht. Wenn der angegebene Schlüssel vorhanden ist, wird der Wert seines Datenfelds abgerufen und anschließend der entsprechende Datensatz mit dem Wert des Datenfelds als Adresse gelesen. Dies wird als „nicht gruppierter Index“ bezeichnet.

InnoDB: Die Datendatei selbst ist die Indexdatei. Im Vergleich zu MyISAM sind die Indexdatei und die Datendatei getrennt, und die Tabellendatendatei selbst ist eine nach B + Tree organisierte Indexstruktur, und das Blattknoten-Datenfeld des Baums speichert die vollständigen Datensätze. Der Schlüssel dieses Indexes ist der Primärschlüssel der Datentabelle, daher ist die InnoDB-Tabellendatendatei selbst der Primärindex. Dies wird als gruppierter Index bezeichnet. Die restlichen Indizes werden als Hilfsindizes verwendet. Im Datenfeld des Hilfsindex wird der Wert des Primärschlüssels des entsprechenden Datensatzes anstelle der Adresse gespeichert, was sich von MyISAM unterscheidet. Wenn Sie auf der Grundlage des Primärindex suchen, können Sie den Knoten, in dem sich der Schlüssel befindet, direkt finden, um die Daten abzurufen. Wenn Sie auf der Grundlage des Hilfsindex suchen, müssen Sie zuerst den Wert des Primärschlüssels abrufen und dann den Primärindex durchgehen. Daher wird beim Entwerfen einer Tabelle nicht empfohlen, ein zu langes Feld als Primärschlüssel zu verwenden. Auch wird nicht empfohlen, ein nicht-monotones Feld als Primärschlüssel zu verwenden, da dies zu häufigen Aufteilungen des Primärindex führt.

Die Rolle des Index:

  • Verbessern Sie die Abfragegeschwindigkeit
  • Sicherstellen der Eindeutigkeit der Daten
  • Es kann die Verbindung zwischen Tabellen beschleunigen und die referenzielle Integrität zwischen Tabellen realisieren.
  • Bei Verwendung von Gruppierungs- und Sortierklauseln für den Datenabruf kann die Gruppierungs- und Sortierzeit erheblich reduziert werden
  • Volltextsuchfelder zur Suchoptimierung.

Indexklassifizierung:

  • Primärschlüssel

Eindeutige Kennung, der Primärschlüssel kann nicht wiederholt werden und es kann nur eine Spalte als Primärschlüssel geben

  • Eindeutiger Index

Vermeiden Sie doppelte Spalten. Eindeutige Indizes können wiederholt werden. Mehrere Spalten können als eindeutige Indizes identifiziert werden.

  • Konventioneller Index

Standardmäßig wird das Index- oder Schlüsselwort verwendet, um

  • Volltextindex

Nur in bestimmten Datenbank-Engines verfügbar, MylSAM

Schnelles Auffinden von Daten

Indizierungskriterien:

  • Mehr Indizes sind nicht besser
  • Indexieren Sie keine sich häufig ändernden Daten
  • Es wird empfohlen, keine Indizes zu Tabellen mit kleinen Datenmengen hinzuzufügen
  • Den Feldern der Suchbedingungen sollten grundsätzlich Indizes hinzugefügt werden.

Die Datenstruktur des Indexes:

-- Beim Erstellen des obigen Indexes können wir den Indextyp dafür angeben. Es gibt zwei Arten von Hash-Typ-Indizes: schnell für einzelne Abfragen und langsam für Bereichsabfragen. Btree-Typ-Index: B+-Baum, je mehr Schichten vorhanden sind, desto exponentieller wächst das Datenvolumen (wir verwenden ihn, weil InnoDB ihn standardmäßig unterstützt)
-- Verschiedene Speicher-Engines unterstützen unterschiedliche Indextypen. InnoDB unterstützt Transaktionen, Zeilensperren, B-Tree, Volltext und andere Indizes, aber keine Hash-Indizes.
MyISAM unterstützt keine Transaktionen, aber Sperren auf Tabellenebene, B-Baum, Volltext und andere Indizes, jedoch keine Hash-Indizes.
Der Speicher unterstützt keine Transaktionen, aber Sperren auf Tabellenebene, B-Baum, Hash und andere Indizes, jedoch keine Volltextindizes.
NDB unterstützt Transaktionen, Zeilensperren und Hash-Indizes, jedoch keine B-Baum-, Volltext- und anderen Indizes.
Das Archiv unterstützt keine Transaktionen, aber Sperren auf Tabellenebene. B-Tree-, Hash-, Volltext- und andere Indizes werden nicht unterstützt.

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung zum Sperren, Entsperren und Löschen von Transaktionen in MySQL-Datenbanktabellen
  • MySQL-Datenbankindizes und -Transaktionen
  • Beispiel-Tutorial für MySQL-Datenbanktransaktionen
  • Golang implementiert die Übermittlung und das Rollback von MySQL-Datenbanktransaktionen
  • Detaillierte Analyse von MySQL-Datenbanktransaktionen und -Sperren
  • Detaillierte Erklärung von Dirty Read, Phantom Read und Non-Repeatable Read in MySQL-Datenbanktransaktionen

<<:  Detaillierte Erläuterung des Bereitstellungsprozesses eines SpringBoot-Projekts über das Docker-Plugin in IDEA

>>:  Detaillierte Erläuterung der Funktionen und Methoden des Vue3-Lebenszyklus

Artikel empfehlen

Grundlegende Nutzungsdetails zur Vue-Komponentenbildung

Inhaltsverzeichnis 1. Was ist Komponentenbildung?...

So installieren Sie MySQL 5.7 aus dem Quellcode in einer CentOS 7-Umgebung

Dieser Artikel beschreibt, wie MySQL 5.7 aus dem ...

So überprüfen Sie, ob MySQL erfolgreich installiert wurde

Nachdem MySQL installiert wurde, können Sie in ei...

So verwenden Sie den Vue-Video-Player für eine Live-Übertragung

Inhaltsverzeichnis 1. Installieren Sie den Vue-Vi...

Methoden zum Defragmentieren und Freigeben von Speicherplatz in MySQL-Tabellen

Inhaltsverzeichnis Ursachen der MySQL-Tabellenfra...

Verwenden von js zur Realisierung eines dynamischen Hintergrunds

In diesem Artikelbeispiel wird der spezifische Co...

Grafisches Tutorial zur kostenlosen Installationsversion von MySQL 5.7.17 winx64

Aktuelle Erfahrungen mit der Installation der kos...

Beispiele für die Verwendung von Docker und Docker-Compose

Docker ist eine Open-Source-Container-Engine, mit...

Vue implementiert Drag & Drop oder Klicken zum Hochladen von Bildern

In diesem Artikel wird der spezifische Code von V...

So installieren und implementieren Sie Zabbix 5.0 für Nginx

Inhaltsverzeichnis Experimentelle Umgebung Instal...

Verwenden Sie die CSS-Eigenschaft border-radius, um den Bogen festzulegen

Phänomen: Wandeln Sie das Div in einen Kreis, ein...