Erstellen Sie einen Tabellenalias mit MySQL VIEW und MERGE
-
Tabellenalias mit MySQL erstellen
VIEW
-
Erstellen Sie einen Tabellenalias mit der MySQL
MERGE
-Tabellen-Engine
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 is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.
LinkedInVerwandter Artikel - MySQL Table
- Alle Zeilen einer MySQL-Tabelle durchlaufen
- Kopieren Sie Tabellenstrukturen, ohne Daten in MySQL zu kopieren
- Rufen Sie die ID des zuletzt eingefügten Datensatzes in MySQL ab
- Sichern Sie eine einzelne Tabelle mit Mysqldump
- Tabellen- und Datenbankstruktur in MySQL anzeigen
- Unterschied zwischen zwei Tabellen in MySQL