Beispiele für die Verwendung temporärer Tabellen in MySQL

Beispiele für die Verwendung temporärer Tabellen in MySQL

Ich war in den letzten beiden Tagen etwas beschäftigt und der offizielle Account wurde seit einigen Tagen nicht mehr aktualisiert. Einige Leser drängten mich daher, ihn noch einmal zu aktualisieren. Nun, das zeigt, dass es immer noch Leute gibt, die darauf achten. Es kommt sowohl mir als auch anderen zugute, was gut ist.

Was ich heute mit Ihnen teilen möchte, sind temporäre Tabellen in MySQL. Ich habe bisher nicht viel über temporäre Tabellen recherchiert. Ich weiß nur, dass MySQL temporäre Tabellen verwendet, um in bestimmten Szenarien bei Gruppierungen und anderen Vorgängen zu helfen. Lernen wir heute temporäre Tabellen kennen.

1. Zunächst einmal. Temporäre Tabellen befinden sich auf Sitzungsebene. Von der aktuellen Sitzung erstellte Tabellen sind in anderen Sitzungen nicht sichtbar.

Sitzung 1:

mysql> temporäre Tabelle test3 erstellen (id_tmp int)engine=innodb;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Sitzung 2:

mysql> zeigen erstellen Tabelle test3\G
FEHLER 1146 (42S02): Tabelle 'test.test3' existiert nicht

2. In der Sitzung kann eine temporäre Tabelle denselben Namen wie eine formale Tabelle haben.

mysql> Tabelle test2 erstellen (ID int)engine=innodb;
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

mysql> temporäre Tabelle test2 erstellen (id_tmp int)engine=innodb;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Es ist ersichtlich, dass beim Erstellen der gleichnamigen Tabelle test2 kein Fehler aufgetreten ist.

3. Wenn die Datenbank physische Tabellen und temporäre Tabellen enthält, verwenden Sie „show create table“, um den Inhalt der temporären Tabelle anzuzeigen:

mysql> zeigen erstellen Tabelle test2\G
*************************** 1. Reihe ***************************
    Tabelle: test2
Tabelle erstellen: CREATE TEMPORARY TABLE `test2` (
 `id_tmp` int(11) STANDARD NULL
) ENGINE=InnoDB STANDARD-CHARSET=utf8
1 Zeile im Satz (0,00 Sek.)

4. Nachdem die temporäre Tabelle gelöscht wurde, überprüft „show create table“ den Inhalt der physischen Tabelle.

mysql> Tabellen wie „test2“ anzeigen;
+------------------------+
| Tabellen_im_Test (test2) |
+------------------------+
| Prüfung 2 |
+------------------------+
1 Zeile im Satz (0,00 Sek.)

mysql> Tabelle Test2 löschen;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> Tabellen wie „test2“ anzeigen;
+------------------------+
| Tabellen_im_Test (test2) |
+------------------------+
| Prüfung 2 |
+------------------------+
1 Zeile im Satz (0,00 Sek.)

5. Der Befehl „show tables“ kann keine temporären Tabellen sehen.

6. Temporäre Tabellen mit demselben Namen können in verschiedenen Sitzungen erstellt werden.

7. Methode zum temporären Speichern von Tabellen

In MySQL wird .frm zum Speichern der Tabellenstruktur und .ibd zum Speichern der Tabellendaten verwendet. Die .frm-Datei wird im Allgemeinen in dem durch den Parameter tmpdir angegebenen Verzeichnis abgelegt. MySQL auf einer Desktop-Windows-Plattform sieht wie folgt aus:

mysql> Variablen wie "%tmpdir%" anzeigen;
+---------------------------------+-------------------------------------------------+
| Variablenname | Wert |
+---------------------------------+-------------------------------------------------+
| innodb_tmpdir | |
| slave_load_tmpdir | C:\WINDOWS\SERVIC~1\NETWOR~1\AppData\Local\Temp |
| temporäres Verzeichnis | C:\WINDOWS\SERVIC~1\NETWOR~1\AppData\Local\Temp |
+---------------------------------+-------------------------------------------------+
3 Zeilen im Set, 1 Warnung (0,01 Sek.)

In MySQL 5.6 wird eine .ibd-Datei zum Speichern der temporären Tabelle generiert.

In MySQL 5.7 wurde ein temporärer Dateitabellenbereich zum Speichern temporärer Dateidaten eingeführt.

Wenn wir verschiedene Sitzungen verwenden, um temporäre Tabellen mit demselben Namen zu erstellen, werden wir feststellen, dass im temporären Tabellenverzeichnis temporäre Tabellendateien mit unterschiedlichen Namen vorhanden sind:

Diese temporären Tabellen werden im Speicher als verknüpfte Listen dargestellt. Wenn eine Sitzung zwei temporäre Tabellen enthält, erstellt MySQL eine verknüpfte Liste temporärer Tabellen, um die beiden temporären Tabellen zu verbinden. In der tatsächlichen Operationslogik durchläuft MySQL, wenn wir eine SQL-Anweisung ausführen, die verknüpfte Liste temporärer Tabellen, um zu prüfen, ob eine temporäre Tabelle mit dem in der SQL-Anweisung angegebenen Tabellennamen vorhanden ist. Wenn eine temporäre Tabelle vorhanden ist, wird zuerst die temporäre Tabelle bearbeitet. Wenn keine temporäre Tabelle vorhanden ist, wird die normale physische Tabelle bearbeitet.

8. Hinweise zu temporären Tabellen bei der Master-Slave-Replikation

Da sich die temporäre Tabelle auf Sitzungsebene befindet, wird sie beim Beenden der Sitzung gelöscht. Der Masterknoten zeigt die temporäre Tabelle jedoch nicht an, sondern schließt die Sitzung, um sie zu löschen. Woher weiß der Slaveknoten also, wann die temporäre Tabelle gelöscht werden muss?

Angenommen, der Masterknoten führt das folgende SQL aus:

Kreta-Tabelle Tbl;
Erstellen Sie eine temporäre Tabelle tmp wie tbl.
in temporäre Werte einfügen (0,0);
in Tabelle einfügen, auswählen * aus tmp;

Wenn im Modus „Binlog=Anweisung/Mixed“ das Binlog der temporären tabellenbezogenen Vorgänge nicht aufgezeichnet wird, meldet die letzte Einfügeanweisung einen Fehler. Weil die temporäre Tabelle nicht gefunden werden kann. In diesem Fall zeichnet das Binärprotokoll von MySQL die Vorgänge in der temporären Tabelle auf. Wenn die Sitzung der Masterdatenbank geschlossen wird, wird die SQL-Anweisung zum Löschen der temporären Tabelle automatisch zum Binärprotokoll hinzugefügt, um die Konsistenz der Master-Slave-Daten sicherzustellen.

Im Binlog=Row-Modus werden SQL-Anweisungen, die sich auf temporäre Tabellen beziehen, nicht in Binlog aufgezeichnet, da im Row-Modus jedes Datenfeld in Binlog zu finden ist. Für die letzte Einfügung in die Select-Anweisung zeichnet Binlog den Datensatz des Einfügens von (0,0) in die Tbl-Tabelle auf.

Wenn die Masterdatenbank im Modus „Binlog=Row“ den Befehl „Drop Table Tmp“ zum Löschen einer temporären Tabelle verwendet, wird dieser Datensatz ignoriert, da das Binlog keine Vorgänge im Zusammenhang mit der temporären Tabelle aufzeichnet.

9. Wie können temporäre Tabellen mit demselben Namen aus verschiedenen Threads gleichzeitig in der Slave-Datenbank vorhanden sein?

Wir wissen, dass temporäre Tabellen auf Sitzungsebene liegen und temporäre Tabellen zwischen verschiedenen Sitzungen denselben Namen haben können. Wenn die Slave-Bibliothek das Binärprotokoll wiedergibt, woher weiß die Slave-Bibliothek, zu welcher Transaktion diese temporären Tabellen mit demselben Namen gehören?

Um dieses Konzept zu verstehen, können Sie sich auf das Konzept der formalen Parameter und der tatsächlichen Parameter in einer Funktion beziehen. Formale Parameter und tatsächliche Parameter können denselben Namen haben, aber wenn sie zugewiesen werden, sind ihre Zeigerwerte unterschiedlich. Daher tritt für Parameter mit demselben Namen kein Fehler für den Compiler auf, da die Zeigerwerte unterschiedlich sind.

MySQL verwaltet Datentabellen. Neben physischen Dateien gibt es auch einen Mechanismus im Speicher, um verschiedene Tabellen zu unterscheiden. Jede Tabelle entspricht einem table_def_key. Der Wert von table_def_key setzt sich aus „Bibliotheksname + Tabellenname + Server-ID + Thread-ID“ zusammen. Da die Thread-ID unterschiedlich ist, kommt es beim Betrieb aus der Bibliothek zu keinem Konflikt.

Oben finden Sie eine ausführliche Erläuterung der temporären Speichertabelle in MySQL. Weitere Informationen zur temporären Speichertabelle von MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Grundlegendes Lernprogramm zur MySQL-Speichertabelle
  • So erstellen Sie eine Speichertabelle in MySQL
  • Verwenden einer Cursorschleife zum Lesen temporärer Tabellen in gespeicherten MySQL-Prozeduren
  • Detaillierte Erklärung des Unterschieds zwischen temporärer MySQL-Tabelle und Partitionstabelle
  • Analyse des Prinzips und der Erstellungsmethode der temporären MySQL-Tabelle
  • Detaillierte Erklärung zur Verwendung von MySQL-Speichertabellen und temporären Tabellen

<<:  Best Practices für die Bereitstellung des ELK7.3.0-Protokollsammlungsdienstes mit Docker

>>:  Verwendung des Vuex-Namespace

Artikel empfehlen

CocosCreator implementiert Skill-Kühleffekt

CocosCreator realisiert Skill-CD-Effekt In vielen...

So verwenden Sie reguläre Ausdrucksabfragen in MySql

Reguläre Ausdrücke werden häufig verwendet, um Te...

Installieren Sie MySQL 5.6 aus der Yum-Quelle im Centos7.4-System

Systemumgebung: centos7.4 1. Prüfen Sie, ob die D...

HTML5+CSS3-Codierungsstandards

Die goldene Regel Unabhängig davon, wie viele Per...

Verwendung des Linux-Befehls usermod

1. Befehlseinführung Der Befehl usermod (user mod...

Welche Vorteile bietet die Verwendung des B+-Baumindex in MySQL?

Bevor wir dieses Problem verstehen, schauen wir u...

Erklärung zur Verwendung von „Ersetzen“ und „Ersetzen in“ in MySQL

„Replace“ und „Replace into“ von MySQL sind beide...

So installieren Sie den Chrome-Browser auf CentOS 7

Dieser Artikel beschreibt, wie Sie den Chrome-Bro...

So funktionieren React Hooks

Inhaltsverzeichnis 1. React Hooks vs. reine Funkt...

Implementierung zum Hinzufügen von Bemerkungsinformationen zu MySQL

Vorwort Einige Leute haben mich in diesen Tagen u...

Beispielanalyse zum Exportieren, Importieren und Kopieren von Docker-Images

Die erste Lösung besteht darin, das Bild in ein ö...

JavaScript Canvas realisiert dynamische Punkt- und Linieneffekte

In diesem Artikel wird der spezifische Code für J...