Erstellen Sie einen Tabellenalias mit MySQL VIEW und MERGE

Habdul Hazeez 18 August 2022
  1. Tabellenalias mit MySQL erstellen VIEW
  2. Erstellen Sie einen Tabellenalias mit der MySQL MERGE-Tabellen-Engine
Erstellen Sie einen Tabellenalias mit MySQL VIEW und MERGE

In diesem Artikel erfahren Sie, wie Sie mit MySQL VIEW und MERGE einen Tabellenalias erstellen.

In beiden Fällen spiegeln sich Änderungen in der ursprünglichen Tabelle in der Alias-Tabelle wider. Außerdem sind die Ergebnisse von SELECT-Abfragen in der Alias- und Originaltabelle gleich.

Tabellenalias mit MySQL erstellen VIEW

Ein mit MySQL erstellter Tabellenalias VIEW erlaubt es einer Tabelle, auf eine Originaltabelle zu verweisen. Hinter den Kulissen erstellt MySQL VIEW eine virtuelle Kopie der Originaltabelle.

Wenn Sie beispielsweise TABLE_A haben, können Sie VIEW verwenden, um TABLE_B zu erstellen. Infolgedessen haben beide Tabellen die gleichen Daten, und eine Lese-Schreib-Abfrage hat auf beide die gleiche Auswirkung.

Um zu zeigen, wie das funktioniert, erstellen Sie eine Datenbank in MySQL und verwenden Sie die folgende SQL, um eine Tabelle zu erstellen:

CREATE TABLE database_administrators (
    dba_id INT NOT NULL AUTO_INCREMENT,
    dba_first_name VARCHAR(50) NOT NULL,
    dba_last_name VARCHAR(50) NOT NULL,
    dba_experience VARCHAR(10) NOT NULL,
    PRIMARY KEY (dba_id)
) ENGINE = InnoDB;

Als nächstes verwenden Sie MySQL VIEW, um die Tabelle dba_table zu erstellen:

CREATE VIEW dba_table AS SELECT * FROM database_administrators;

Ab diesem Zeitpunkt werden in database_administrators eingefügte Datensätze in dba_table widergespiegelt.

Datensätze in die Originaltabelle einfügen

Verwenden Sie Folgendes, um Datensätze in database_administrators einzufügen:

INSERT INTO database_administrators (dba_first_name, dba_last_name, dba_experience) VALUES('Michael', 'Faraday', '3 years');
INSERT INTO database_administrators (dba_first_name, dba_last_name, dba_experience) VALUES('Joseph', 'Klinsman', '2 years');
INSERT INTO database_administrators (dba_first_name, dba_last_name, dba_experience) VALUES('Matt', 'Abott', '2 years');

Bestätigen Sie, dass die Datensätze in database_administrators vorhanden sind:

SELECT * FROM database_administrators;

Ausgabe:

+--------+----------------+---------------+----------------+
| dba_id | dba_first_name | dba_last_name | dba_experience |
+--------+----------------+---------------+----------------+
|      1 | Michael        | Faraday       | 3 years        |
|      2 | Joseph         | Klinsman      | 2 years        |
|      3 | Matt           | Abott         | 2 years        |
+--------+----------------+---------------+----------------+
3 rows in set (0.00 sec)

Wenn Sie dba_table überprüfen, erhalten Sie die gleichen Ergebnisse:

mysql > SELECT * FROM dba_table;
+--------+----------------+---------------+----------------+
| dba_id | dba_first_name | dba_last_name | dba_experience |
+--------+----------------+---------------+----------------+
|      1 | Michael        | Faraday       | 3 years        |
|      2 | Joseph         | Klinsman      | 2 years        |
|      3 | Matt           | Abott         | 2 years        |
+--------+----------------+---------------+----------------+
3 rows in set (0.00 sec)

Datensätze in die virtuelle Tabelle einfügen

Sie können auch Datensätze in dba_table einfügen, und Sie sehen sie in database_administrators:

INSERT INTO dba_table (dba_first_name, dba_last_name, dba_experience) VALUES('Calvert', 'Lewin', '9 years');

Überprüfen Sie dba_table auf die neuen Daten:

mysql > SELECT * FROM dba_table;
+--------+----------------+---------------+----------------+
| dba_id | dba_first_name | dba_last_name | dba_experience |
+--------+----------------+---------------+----------------+
|      1 | Michael        | Faraday       | 3 years        |
|      2 | Joseph         | Klinsman      | 2 years        |
|      3 | Matt           | Abott         | 2 years        |
|      4 | Calvert        | Lewin         | 9 years        |
+--------+----------------+---------------+----------------+
4 rows in set (0.00 sec)

Bestätigen Sie, ob die neuen Daten in database_administrators vorhanden sind:

mysql > SELECT * FROM database_administrators;
+--------+----------------+---------------+----------------+
| dba_id | dba_first_name | dba_last_name | dba_experience |
+--------+----------------+---------------+----------------+
|      1 | Michael        | Faraday       | 3 years        |
|      2 | Joseph         | Klinsman      | 2 years        |
|      3 | Matt           | Abott         | 2 years        |
|      4 | Calvert        | Lewin         | 9 years        |
+--------+----------------+---------------+----------------+
4 rows in set (0.00 sec)

Aktualisieren Sie die virtuelle Tabelle

Aktualisierungen in der dba_table spiegeln sich auch in database_administrators wider:

UPDATE dba_table SET dba_experience = '4 years' WHERE dba_id = 2;

Das Folgende ist die aktualisierte Tabelle in dba_table und database_administrators:

+--------+----------------+---------------+----------------+
| dba_id | dba_first_name | dba_last_name | dba_experience |
+--------+----------------+---------------+----------------+
|      1 | Michael        | Faraday       | 3 years        |
|      2 | Joseph         | Klinsman      | 2 years        |
|      3 | Matt           | Abott         | 2 years        |
|      4 | Calvert        | Lewin         | 9 years        |
+--------+----------------+---------------+----------------+
4 rows in set (0.00 sec)

Daten aus der Originaltabelle löschen

Wenn Sie Daten in database_administrators löschen, werden sie in dba_table gelöscht:

DELETE FROM database_administrators WHERE dba_id = 1;

Ergebnis der Löschung auf database_administrators:

mysql> SELECT * from database_administrators;
+--------+----------------+---------------+----------------+
| dba_id | dba_first_name | dba_last_name | dba_experience |
+--------+----------------+---------------+----------------+
|      2 | Joseph         | Klinsman      | 4 years        |
|      3 | Matt           | Abott         | 2 years        |
|      4 | Calvert        | Lewin         | 9 years        |
+--------+----------------+---------------+----------------+
3 rows in set (0.00 sec)

Wie Sie sehen, existieren die gelöschten Daten nicht mehr in dba_table:

mysql> SELECT * from dba_table;
+--------+----------------+---------------+----------------+
| dba_id | dba_first_name | dba_last_name | dba_experience |
+--------+----------------+---------------+----------------+
|      2 | Joseph         | Klinsman      | 4 years        |
|      3 | Matt           | Abott         | 2 years        |
|      4 | Calvert        | Lewin         | 9 years        |
+--------+----------------+---------------+----------------+
3 rows in set (0.00 sec)

Erstellen Sie einen Tabellenalias mit der MySQL MERGE-Tabellen-Engine

Mit der MySQL-Tabellen-Engine MERGE können Sie einen Alias ​​aus einer Originaltabelle erstellen. Damit dies funktioniert, sollte die ursprüngliche Tabelle die MyISAM-Engine haben.

Anders als der mit VIEW erstellte Alias ​​ist der Alias ​​mit MERGE jedoch schreibgeschützt. Das bedeutet, dass Sie keine Daten in die Alias-Tabelle einfügen können.

Um zu zeigen, wie dies funktioniert, erstellen Sie eine Datenbank und verwenden Sie Folgendes, um eine Tabelle zu erstellen:

CREATE TABLE devops_engineer (
    engineer_id INT NOT NULL AUTO_INCREMENT,
    engineer_first_name VARCHAR(50) NOT NULL,
    engineer_last_name VARCHAR(50) NOT NULL,
    PRIMARY KEY (engineer_id)
) ENGINE = MyISAM;

Führen Sie nun nacheinander folgendes SQL aus:

CREATE TABLE mergecopy_devops_engineer SELECT * FROM devops_engineer;

ALTER TABLE mergecopy_devops_engineer ENGINE=MERGE;

ALTER TABLE mergecopy_devops_engineer UNION=(devops_engineer);

Mit dem vorherigen SQL wird mergecopy_devops_engineer zu einer schreibgeschützten Kopie von devops_engineer. Fügen Sie nun Datensätze in devops_engineer ein:

INSERT INTO devops_engineer (engineer_first_name, engineer_last_name) VALUES('Delft', 'Stack');
INSERT INTO devops_engineer (engineer_first_name, engineer_last_name) VALUES('Margaret', 'Thatcher');

Das Folgende sind die neuen Datensätze in devops_engineer:

mysql> SELECT * FROM devops_engineer;
 +-------------+---------------------+--------------------+
| engineer_id | engineer_first_name | engineer_last_name |
+-------------+---------------------+--------------------+
|           1 | Delft               | Stack              |
|           2 | Margaret            | Thatcher           |
+-------------+---------------------+--------------------+
2 rows in set (0.03 sec)

Wenn Sie mergecopy_devops_engineer überprüfen, sind die Datensätze dieselben:

mysql> SELECT * FROM mergecopy_devops_engineer;
 +-------------+---------------------+--------------------+
| engineer_id | engineer_first_name | engineer_last_name |
+-------------+---------------------+--------------------+
|           1 | Delft               | Stack              |
|           2 | Margaret            | Thatcher           |
+-------------+---------------------+--------------------+
2 rows in set (0.03 sec)

In der Zwischenzeit können Sie Daten in mergecopy_devops_engineer löschen und aktualisieren. Als Ergebnis sehen Sie die Änderungen in devops_engineer.

Sie können jedoch keine Daten in mergecopy_devops_engineer einfügen, da es schreibgeschützt ist:

mysql> INSERT INTO mergecopy_devops_engineer (engineer_first_name, engineer_last_name) VALUES('John', 'Doe');
ERROR 1036 (HY000): Table 'mergecopy_devops_engineer' is read only
Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn

Verwandter Artikel - MySQL Table