Ausführliche Erläuterung versteckter Felder, einer neuen Funktion von MySQL 8.0

Ausführliche Erläuterung versteckter Felder, einer neuen Funktion von MySQL 8.0

Vorwort

MySQL Version 8.0.23 fügt eine neue Funktion hinzu: Unsichtbare Spalte, auch bekannt als unsichtbares Feld. Dieser Artikel stellt die Konzepte und die spezifische Implementierung von versteckten MySQL-Feldern vor.

Grundlegende Konzepte

Auf versteckte Felder muss in der Abfrage explizit verwiesen werden, sonst sind sie für die Abfrage nicht sichtbar. MySQL 8.0.23 unterstützt nun auch versteckte Felder. Davor waren alle Felder sichtbare Felder.

Stellen Sie sich das folgende Anwendungsszenario vor: Wenn eine Anwendung mit der Anweisung SELECT* auf eine Tabelle zugreift und weiterhin Abfragen durchführen muss, ist eine ordnungsgemäße Funktion erforderlich, auch wenn wir der Tabelle ein neues Feld hinzufügen, das die Anwendung nicht benötigt. Bei der SELECT *-Abfrage stellt das Sternchen (*) alle Felder in der Tabelle außer den ausgeblendeten Feldern dar, daher können wir die neu hinzugefügten Felder als ausgeblendete Felder definieren. Das ausgeblendete Feld ist für SELECT*-Abfragen nicht sichtbar, sodass die Anwendung weiterhin ausgeführt wird. Wenn eine neue Version Ihrer Anwendung dieses Feld verwenden muss, können Sie es in der Abfrage explizit angeben.

PS: Es wird nicht empfohlen, die SELECT * -Anweisung zum Abfragen von Daten zu verwenden. Die zurückzugebenden Felder sollten klar angegeben werden.

Versteckte Felder und DDL-Anweisungen

Standardmäßig sind die erstellten Felder sichtbare Felder. Wenn Sie die Sichtbarkeit einer Spalte explizit angeben möchten, können Sie in der Anweisung CREATE TABLE oder ALTER TABLE die Schlüsselwörter VISIBLE oder INVISIBLE für die Spaltendefinition angeben. Zum Beispiel:

Tabelle erstellen t1 (
 ich INT,
 j DATUM UNSICHTBAR
)ENGINE = InnoDB;
ALTER TABLE t1 ADD COLUMN k INT UNSICHTBAR;

Wenn Sie die Sichtbarkeit eines Felds ändern möchten, können Sie auch die Schlüsselwörter VISIBLE oder INVISIBLE verwenden. Zum Beispiel:

ALTER TABLE t1 CHANGE COLUMN jj DATE SICHTBAR;
ALTER TABLE t1 MODIFY COLUMN j DATE INVISIBLE;
ALTER TABLE t1 ALTER COLUMN j SICHTBAR SETZEN;

Beachten Sie bei der Verwendung ausgeblendeter Felder Folgendes:

  • Eine Tabelle benötigt mindestens ein sichtbares Feld. Wenn Sie alle Felder auf „Ausgeblendet“ setzen, wird ein Fehler zurückgegeben.
  • Versteckte Felder unterstützen allgemeine Feldattribute: NULL, NOT NULL und AUTO_INCREMENT usw.
  • Eine generierte Spalte kann ein ausgeblendetes Feld sein.
  • Indizes können versteckte Felder verwenden, einschließlich PRIMARY KEY- und UNIQUE-Indizes. Obwohl eine Tabelle mindestens eine sichtbare Spalte haben muss, muss eine Indexdefinition keine sichtbaren Spalten enthalten.
  • Wenn Sie ein ausgeblendetes Feld in einer Tabelle löschen, wird das Feld auch aus den zugehörigen Indizes gelöscht.
  • Fremdschlüsseleinschränkungen können basierend auf ausgeblendeten Feldern definiert werden und Fremdschlüsseleinschränkungen können auch auf ausgeblendete Felder verweisen.
  • CHECK-Einschränkungen können basierend auf ausgeblendeten Feldern definiert werden. Beim Einfügen oder Aktualisieren von Daten wird ein Fehler zurückgegeben, wenn die CHECK-Einschränkung für das ausgeblendete Feld verletzt wird.

Wenn Sie die Tabellenstruktur mit der Anweisung CREATE TABLE ... LIKE kopieren, werden die ausgeblendeten Felder der Originaltabelle kopiert und bleiben auch in der neuen Tabelle ausgeblendete Felder. Wenn Sie eine Tabelle mit der Anweisung CREATE TABLE ... SELECT kopieren, werden ausgeblendete Spalten nicht einbezogen, sofern sie nicht explizit angegeben werden. Selbst wenn Sie ausgeblendete Felder in die Originaltabelle aufnehmen, werden diese Felder in der neuen Tabelle sichtbar. Zum Beispiel:

mysql> TABELLE ERSTELLEN t1 (Spalte 1 INT, Spalte 2 INT UNSICHTBAR);
mysql> ERSTELLEN SIE TABELLE t2 AS SELECT col1, col2 FROM t1;
mysql> ANZEIGEN TABELLE ERSTELLEN t2_G
*************************** 1. Reihe ***************************
  Tabelle: t2
Tabelle erstellen: CREATE TABLE `t2` (
 `col1` int DEFAULT NULL,
 `col2` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Wenn Sie das ausgeblendete Attribut für diese Spalten beibehalten möchten, können Sie das ausgeblendete Attribut nach CREATE TABLE für sie angeben. Zum Beispiel:

mysql> TABELLE ERSTELLEN t1 (Spalte 1 INT, Spalte 2 INT UNSICHTBAR);
mysql> ERSTELLEN SIE TABELLE t2 (col2 INT UNSICHTBAR) AS SELECT col1, col2 FROM t1;
mysql> ANZEIGEN TABELLE ERSTELLEN t2_G
*************************** 1. Reihe ***************************
  Tabelle: t2
Tabelle erstellen: CREATE TABLE `t2` (
 `col1` int DEFAULT NULL,
 `col2` int DEFAULT NULL /*!80023 UNSICHTBAR */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Ansichten können auf ausgeblendete Felder verweisen, die in der Definition explizit angegeben werden müssen. Das Ändern der Sichtbarkeit eines Felds nach der Definition der Ansicht hat keine Auswirkungen auf die Ansicht.

Versteckte Felder und DML-Anweisungen

Bei SELECT-Anweisungen werden ausgeblendete Felder nicht in die Abfragestruktur aufgenommen, sofern sie nicht ausdrücklich in der Abfrageliste angegeben sind. * und tbl_name.* in der Abfrageliste schließen keine ausgeblendeten Felder ein. Natürliche Verknüpfungen schließen keine ausgeblendeten Felder ein.

Für die folgende Aussage:

mysql> TABELLE ERSTELLEN t1 (Spalte 1 INT, Spalte 2 INT UNSICHTBAR);
mysql> INSERT INTO t1 (col1, col2) VALUES (1, 2), (3, 4);

mysql> AUSWÄHLEN * VON t1;
+------+
| Spalte1 |
+------+
| 1 |
| 3 |
+------+

mysql> WÄHLEN Sie Spalte1, Spalte2 VON t1;
+------+------+
| Spalte1 | Spalte2 |
+------+------+
| 1 | 2 |
| 3 | 4 |
+------+------+

Die erste SELECT-Anweisung verweist nicht auf das ausgeblendete Feld col2 (* schließt ausgeblendete Felder aus), daher wird das Feld col2 nicht in den Abfrageergebnissen zurückgegeben. Die zweite SELECT-Anweisung gibt explizit das Feld col2 an, sodass dieses Feld in den Abfrageergebnissen zurückgegeben wird.

Wenn bei Abfrageanweisungen keine Daten für das ausgeblendete Feld angegeben sind, wird die implizite Standardwertregel zum Zuweisen eines Werts verwendet.

Bei INSERT-Anweisungen (einschließlich Dateneinfügung durch REPLACE-Anweisungen) werden implizite Standardwerte zugewiesen, wenn keine Feldliste angegeben ist, eine leere Liste angegeben ist oder in der Feldliste keine ausgeblendeten Felder angegeben sind. Zum Beispiel:

TABELLE ERSTELLEN t1 (Spalte1 INT, Spalte2 INT UNSICHTBAR);
IN t1-WERTE EINFÜGEN(...);
Einfügen in t1 () Werte (...);
INSERT INTO t1 (col1) VALUES(...);

Für die ersten beiden INSERT-Anweisungen muss die VALUES()-Liste für jedes sichtbare und ausgeblendete Feld einen Wert bereitstellen. Für die dritte INSERT-Anweisung muss die VALUES()-Liste für jedes angegebene Feld einen Wert bereitstellen.

Bei LOAD DATA- und LOAD XML-Anweisungen werden implizite Standardwerte verwendet, wenn keine Feldliste angegeben ist oder wenn in der Feldliste keine versteckten Felder angegeben sind. Eingabedaten dürfen keine Werte für ausgeblendete Felder enthalten.

Wenn Sie für die obige Anweisung einen nicht standardmäßigen Wert angeben möchten, können Sie das ausgeblendete Feld explizit in der Feldliste angeben und einen Wert in der Liste VALUES() angeben.

INSERT INTO ... SELECT * und REPLACE INTO ... SELECT * schließen keine ausgeblendeten Felder ein, da * keine ausgeblendeten Felder zurückgibt. Auch hier wird für die Zuweisung die implizite Standardwertregel verwendet.

In Anweisungen, die Einfügungen, Ersetzungen oder Änderungen von Daten basierend auf einem PRIMARY KEY- oder UNIQUE-Index einfügen oder ignorieren, behandelt MySQL versteckte Felder genauso wie sichtbare Felder: Versteckte Felder werden auch für Schlüssel-Wert-Vergleiche verwendet. Insbesondere wenn eine neue Zeile denselben eindeutigen Schlüsselfeldwert wie eine vorhandene Zeile hat, wird die folgende Verarbeitung verwendet, unabhängig davon, ob das Indexfeld sichtbar ist:

  • Wenn der Modifikator IGNORE angegeben ist, ignorieren INSERT, LOAD DATA und LOAD XML neue Datenzeilen.
  • ERSETZEN Ersetzt die vorhandene Datenzeile durch die neue Datenzeile. Dasselbe gilt für LOAD DATA und LOAD XML, wenn der Modifikator REPLACE angegeben ist.
  • INSERT ... ON DUPLICATE KEY UPDATE aktualisiert die vorhandene Datenzeile.

Wenn Sie ein verstecktes Feld mit einer UPDATE-Anweisung aktualisieren möchten, können Sie ihm genau wie einem sichtbaren Feld explizit einen Wert zuweisen.

Metadaten zu Feldern ausblenden

Wir können die sichtbaren Eigenschaften der Felder über das Feld EXTRA der Systemtabelle INFORMATION_SCHEMA.COLUMNS oder den Befehl SHOW COLUMNS anzeigen. Zum Beispiel:

mysql> TABELLENNAME, SPALTENNAME, EXTRA AUSWÄHLEN
  VON INFORMATION_SCHEMA.COLUMNS
  WO TABLE_SCHEMA = „Test“ UND TABLE_NAME = „t1“;
+------------+----------+-----------+
| TABELLENNAME | SPALTENNAME | EXTRA |
+------------+----------+-----------+
| t1 | ich | |
| t1 | j | |
| t1 | k | UNSICHTBAR |
+------------+----------+-----------+

Standardmäßig sind die Felder sichtbar. In diesem Fall ist das Feld EXTRA leer. Für ausgeblendete Felder ist EXTRA ausdrücklich UNSICHTBAR.

Der Befehl SHOW CREATE TABLE kann ausgeblendete Spalten in der Tabelle anzeigen. Die Spaltendefinition enthält einen versionsbasierten Kommentar, der ein Schlüsselwort INVISIBLE enthält:

mysql> ANZEIGEN CREATE TABLE t1_G
*************************** 1. Reihe ***************************
  Tabelle: t1
Tabelle erstellen: CREATE TABLE `t1` (
 `i` int DEFAULT NULL,
 `j` int DEFAULT NULL,
 `k` int DEFAULT NULL /*!80023 UNSICHTBAR */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

mysqldump und mysqlpump verwenden den Befehl SHOW CREATE TABLE, daher enthalten die von ihnen exportierten Tabellendefinitionen ausblendbare Felder. Außerdem schließen sie die Werte ausgeblendeter Felder in die exportierten Daten ein. Wenn die Exportdatei in eine ältere MySQL-Version geladen wird, die keine versteckten Felder unterstützt, werden die versionsbasierten Kommentarinformationen ignoriert und die versteckten Felder als sichtbare Felder verwendet.

Versteckte Felder und Binärprotokolle

Bei Ereignissen im Binärprotokoll behandelt MySQL versteckte Felder folgendermaßen:

  • Das Ereignis, das die Tabelle erstellt, enthält das Attribut UNSICHTBAR für das ausgeblendete Feld.
  • Ausgeblendete und sichtbare Felder werden in Datenzeilenereignissen auf die gleiche Weise behandelt. Sie werden entsprechend der Einstellung der Systemvariable binlog_row_image verarbeitet.
  • Beim Anwenden von Datenzeilenereignissen werden ausgeblendete Felder genauso behandelt wie sichtbare Felder. Der verwendete Algorithmus und Index werden basierend auf der Einstellung der Systemvariable slave_rows_search_algorithms ausgewählt.
  • Versteckte Felder werden beim Berechnen des Schreibsatzes genauso behandelt wie sichtbare Felder. Der Schreibsatz enthält Indizes, die auf ausgeblendeten Felddefinitionen basieren.
  • Der Befehl mysqlbinlog schließt sichtbare Attribute in die Feldmetadaten ein.

Zusammenfassen

Dies ist das Ende dieses Artikels über die neue Funktion von MySQL 8.0: versteckte Felder. Weitere Informationen zu versteckten Feldern in MySQL 8.0 finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Absteigender Index in MySQL 8.0
  • Detaillierte Erläuterung der zugrunde liegenden Implementierung des absteigenden Index, einer neuen Funktion von MySQL 8
  • Neue Funktionen in MySQL 8: Details zu absteigenden Indizes
  • Die drei neuen Indizes, die in MySQL 8 hinzugefügt wurden, sind versteckt, absteigend und Funktionen

<<:  Informationen zur Verwendung der Vue v-on-Direktive

>>:  HTML-Code einer Webseite: Erzeugung von Lauftext

Artikel empfehlen

Detaillierte Analyse der HTML-Semantik und der zugehörigen Front-End-Frameworks

Über Semantik Die Semantik ist die Lehre von der ...

So testen Sie die maximale Anzahl von TCP-Verbindungen in Linux

Vorwort Es besteht ein Missverständnis bezüglich ...

So stellen Sie Redis in Docker bereit und starten es

Redis im Docker bereitstellen Installieren Sie zu...

Programme zum Abfragen und Löschen der Portnutzung im Windows-Betriebssystem

Im Windows-Betriebssystem das Programm zum Abfrag...

Tutorial zur Installation von phpMyAdmin unter Linux centos7

yum install httpd php mariadb-server –y Notieren ...

Gängige Methoden zur Optimierung der Docker-Imagegröße

Die Docker-Images, die wir normalerweise erstelle...

Lösung zum Vergessen des Administratorkennworts der MySQL-Datenbank

1. Geben Sie den Befehl mysqld --skip-grant-table...

So beheben Sie den abnormalen Fehler ERROR: 2002 in MySQL

Kürzlich ist beim Starten von MySQL ein Fehler au...

Verwenden Sie die Befehle more, less und cat in Linux, um Dateiinhalte anzuzeigen

Unter Linux können die Befehle cat, more und less...

JavaScript CSS3 zur Implementierung einer einfachen Video-Sperrfunktion

In diesem Artikel wird versucht, eine Demo zur Si...