VorwortMySQL 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 KonzepteAuf 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-AnweisungenStandardmäß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:
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-AnweisungenBei 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 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 ausblendenWir 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ärprotokolleBei Ereignissen im Binärprotokoll behandelt MySQL versteckte Felder folgendermaßen:
ZusammenfassenDies 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:
|
<<: Informationen zur Verwendung der Vue v-on-Direktive
>>: HTML-Code einer Webseite: Erzeugung von Lauftext
Lösen Sie das Problem der verstümmelten chinesisc...
Über Semantik Die Semantik ist die Lehre von der ...
Vorwort Es besteht ein Missverständnis bezüglich ...
Redis im Docker bereitstellen Installieren Sie zu...
Im Windows-Betriebssystem das Programm zum Abfrag...
yum install httpd php mariadb-server –y Notieren ...
Die Docker-Images, die wir normalerweise erstelle...
Notieren Sie die Probleme, die Sie für andere lös...
CSS setzt Overflow so, dass die Bildlaufleiste au...
1. Geben Sie den Befehl mysqld --skip-grant-table...
3 Möglichkeiten zum Implementieren des Tab-Wechse...
Kürzlich ist beim Starten von MySQL ein Fehler au...
Unter Linux können die Befehle cat, more und less...
In diesem Artikel wird versucht, eine Demo zur Si...
Inhaltsverzeichnis Vorwort 1. Binärer Baum 1.1. D...