Überblick Ich habe vor Kurzem begonnen, mir Wissen über MySQL anzueignen. Ich habe es auf der Grundlage der von mir erlernten Kenntnisse und meines eigenen Verständnisses organisiert und weitergegeben. Dieser Artikel analysiert den Ausführungsprozess der nächsten SQL-Anweisung in MySQL, einschließlich des Ablaufs von SQL-Abfragen in MySQL und der Aktualisierung von SQL-Anweisungen. 1. Analyse der MySQL-Architektur Nachfolgend sehen Sie ein kurzes Architekturdiagramm von MySQL: MySQL ist hauptsächlich in die Serverebene und die Speicher-Engine-Ebene unterteilt Serverebene : umfasst hauptsächlich Konnektoren, Abfrage-Cache, Analysator, Optimierer, Executor usw. Alle speicherübergreifenden Engine-Funktionen werden in dieser Ebene implementiert, z. B. gespeicherte Prozeduren, Trigger, Ansichten, Funktionen usw. Es gibt auch ein allgemeines Protokollmodul, das Binglog-Protokollmodul. Speicher-Engine : Hauptsächlich für das Speichern und Lesen von Daten verantwortlich, verwendet eine austauschbare Plug-In-Architektur und unterstützt mehrere Speicher-Engines wie InnoDB, MyISAM, Memory usw. Unter diesen verfügt die InnoDB-Engine über ein eigenes Protokollmodul, das Redolog-Modul. Als Standard-Engine wird InnoDB Version 5.5.5 verwendet. Anschlüsse Es ist hauptsächlich für die Benutzeranmeldung bei der Datenbank und die Benutzeridentitätsauthentifizierung verantwortlich, einschließlich der Überprüfung des Kontokennworts, der Berechtigungen und anderer Vorgänge. Wenn das Kennwort des Benutzerkontos übergeben wird, fragt der Connector alle Berechtigungen des Benutzers in der Berechtigungstabelle ab. Danach hängt die Berechtigungslogikbeurteilung in dieser Verbindung von den zu diesem Zeitpunkt gelesenen Berechtigungsdaten ab. Mit anderen Worten: Solange die Verbindung nicht getrennt wird, ist der Benutzer nicht betroffen, selbst wenn der Administrator die Berechtigungen des Benutzers ändert. Abfrage-Cache Nachdem die Verbindung hergestellt wurde, wird beim Ausführen einer Abfrageanweisung zuerst der Cache abgefragt. Mysql überprüft zunächst, ob das SQL ausgeführt wurde, und speichert es in Form von Schlüssel-Wert im Speicher zwischen. Der Schlüssel ist die Abfrageschätzung und der Wert ist der Ergebnissatz. Wird der Cache-Schlüssel getroffen, wird er direkt an den Client zurückgegeben. Wird er nicht getroffen, werden nachfolgende Operationen ausgeführt und die Ergebnisse nach Abschluss für den nächsten Aufruf zwischengespeichert. Natürlich wird bei der tatsächlichen Ausführung der Cache-Abfrage noch einmal geprüft, ob die Berechtigungen des Benutzers vorliegen und ob Abfragebedingungen für die Tabelle vorliegen. Es wird nicht empfohlen, Cache für MySQL-Abfragen zu verwenden, da die effektive Zeit des Caches bei häufig aktualisierten Daten zu kurz ist und die Wirkung oft nicht gut ist. Für Daten, die nicht häufig aktualisiert werden, ist es immer noch möglich, Cache zu verwenden. Die Cache-Funktion wurde nach MySQL-Version 8.0 gelöscht. Der Beamte glaubt auch, dass diese Funktion relativ wenige tatsächliche Anwendungsszenarien hat, also wurde sie einfach gelöscht. Analysator Wenn MySQL nicht auf den Cache trifft, wird es in den Analysator eingegeben, der hauptsächlich zur Analyse des Zwecks der SQL-Anweisung verwendet wird. Der Analysator ist ebenfalls in mehrere Schritte unterteilt: Der erste Schritt ist die lexikalische Analyse. Eine SQL-Anweisung besteht aus mehreren Zeichenfolgen. Zuerst müssen wir Schlüsselwörter extrahieren, wie „Auswählen“, „Abfragetabelle vorschlagen“, „Feldnamen vorschlagen“, „Abfragebedingungen vorschlagen“ und so weiter. Nach Abschluss dieser Vorgänge gelangen Sie zum zweiten Schritt. Der zweite Schritt, die Syntaxanalyse, dient hauptsächlich dazu, festzustellen, ob das von Ihnen eingegebene SQL korrekt ist und ob es der MySQL-Syntax entspricht. Nach Abschluss dieser beiden Schritte ist MySQL zur Ausführung bereit, aber wie wird es ausgeführt und wie erzielt man das beste Ergebnis? Hier kommt der Optimierer ins Spiel. Optimierer Die Rolle des Optimierers besteht darin, den von ihm als optimal erachteten Ausführungsplan auszuführen (obwohl dieser manchmal nicht optimal ist), z. B. wie ein Index ausgewählt wird, wenn mehrere Indizes vorhanden sind, wie die Zuordnungsreihenfolge ausgewählt wird, wenn mehrere Tabellen abgefragt werden usw. Stellantrieb Nachdem der Ausführungsplan ausgewählt wurde, ist MySQL bereit, mit der Ausführung zu beginnen. Zunächst wird vor der Ausführung überprüft, ob der Benutzer über die Berechtigung verfügt. Wenn der Benutzer keine Berechtigung hat, wird eine Fehlermeldung zurückgegeben. Wenn der Benutzer über die Berechtigung verfügt, wird die Engine-Schnittstelle aufgerufen und das Ergebnis der Schnittstellenausführung zurückgegeben. 2. Anweisungsanalyse 2.1 Abfrageanweisung Nachdem nun so viel gesagt wurde: Wie wird eine SQL-Anweisung ausgeführt? Tatsächlich kann unser SQL in zwei Typen unterteilt werden, einer ist Abfrage und der andere ist Aktualisierung (Hinzufügen, Aktualisieren, Löschen). Lassen Sie uns zunächst die Abfrageanweisung analysieren. Die Anweisung lautet wie folgt: wähle * aus tb_student A, wobei A.Alter='18' und A.Name='Student'; In Kombination mit der obigen Beschreibung analysieren wir den Ausführungsfluss dieser Anweisung:
a. Fragen Sie zuerst die Tabelle mit dem Namen des Schülers „Zhang San“ ab und ermitteln Sie dann, ob er 18 Jahre alt ist. Der Optimierer wählt dann basierend auf seinem eigenen Optimierungsalgorithmus die Lösung mit der besten Ausführungseffizienz aus (der Optimierer glaubt, dass dies möglicherweise nicht immer die beste Lösung ist). Nachdem Sie den Ausführungsplan bestätigt haben, können Sie mit der Ausführung beginnen. Führen Sie eine Berechtigungsprüfung durch. Wenn keine Berechtigung vorliegt, wird eine Fehlermeldung zurückgegeben. Wenn eine Berechtigung vorliegt, wird die Datenbank-Engine-Schnittstelle aufgerufen und das Ausführungsergebnis der Engine zurückgegeben. 2.2 Update-Anweisung Oben sehen Sie den Ausführungsprozess einer SQL-Abfrage. Sehen wir uns also an, wie eine Update-Anweisung ausgeführt wird. Die SQL-Anweisung lautet wie folgt: Aktualisiere tb_student. Setze A.age='19', wobei A.name='19'; Lassen Sie uns Zhang Sans Alter ändern. In der tatsächlichen Datenbank wird dieses Altersfeld definitiv nicht festgelegt, sonst werden Sie vom technischen Direktor geschlagen. Tatsächlich folgt diese Anweisung im Wesentlichen dem Prozess der vorherigen Abfrage, aber es ist notwendig, beim Ausführen von Aktualisierungen Protokolle aufzuzeichnen, wodurch das Protokollmodul eingeführt wird. Das mit MySQL gelieferte Protokollmodul ist binlog (Archivprotokoll), das von allen Speicher-Engines verwendet werden kann. Die häufig verwendete InnoDB-Engine verfügt auch über ein Protokollmodul Redo-Log. Wir werden den Ausführungsprozess dieser Anweisung im InnoDB-Modus besprechen. Der Ablauf ist wie folgt:
Einige Studenten werden hier sicherlich fragen, warum wir zwei Protokollierungsmodule benötigen. Können wir nicht ein Protokollierungsmodul verwenden? Dies ist der vorherige MySQL-Modus. Die MyISAM-Engine verfügt nicht über ein Redo-Log, daher wissen wir, dass sie keine Transaktionen unterstützt. Das bedeutet also nicht, dass nicht nur ein Log-Modul verwendet werden kann, aber die InnoDB-Engine unterstützt Transaktionen über ein Redo-Log. Dann fragen sich manche Studenten vielleicht: Kann ich zwei Protokollmodule verwenden, ohne es so kompliziert zu machen? Warum muss Redo Log den Status „Prepare Pre-Commit“ einführen? Hier verwenden wir einen Beweis durch Widerspruch, um zu erklären, warum wir das tun.
Wenn die zweiphasige Redo-Log-Commit-Methode angewendet wird, ist die Situation anders. Nach dem Schreiben des Binglogs verhindert das Senden des Redo-Logs das Auftreten der oben genannten Probleme und stellt so die Datenkonsistenz sicher. Die Frage ist also: Gibt es eine Extremsituation? Angenommen, das Redo-Protokoll befindet sich im Pre-Commit-Zustand und das Bing-Protokoll wurde geschrieben. Was passiert, wenn zu diesem Zeitpunkt ein abnormaler Neustart erfolgt? Dies hängt vom Verarbeitungsmechanismus von MySQL ab. Der Verarbeitungsprozess von MySQL ist wie folgt:
Dadurch wird das Problem der Datenkonsistenz gelöst. Abschluss
IV. Referenz „Gemeinsam ein MySQL-Wissensnetzwerk aufbauen“ Oben finden Sie eine ausführliche Erklärung, wie eine SQL-Anweisung in MySQL ausgeführt wird. Ich hoffe, dass sie Ihnen weiterhilft. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: Gegenfall für die Vue-Implementierung
Es gibt viele Importmethoden im Internet, und die...
So installieren Sie GRUB für Linux Server Sie kön...
In diesem Artikel wird das kostenlose MySQL-Insta...
Ich habe kürzlich MySQL verwendet. Im Artikel „My...
1. Installation von Windows Server 2019 Installie...
Ich arbeite derzeit an einem eigenen kleinen Prog...
Inhaltsverzeichnis Vorwort 1. Einführung in Axios...
Inhaltsverzeichnis 1. Definition des Stapels 2. J...
Das Projekt wurde in diesen Tagen getestet und de...
XPath ist eine Sprache zum Auswählen von Teilen v...
Inhaltsverzeichnis Prototypenkette Wir können ein...
Laden Sie MySQL-8.0.23 herunter Klicken Sie zum H...
Vorwort In diesem Artikel wird hauptsächlich erlä...
Vorwort: Ich bin auf die Anforderung gestoßen, be...
Inhaltsverzeichnis 1. Szenariobeschreibung: 2. Fa...