Eine Ansicht in MySQL ist eine benannte Abfrage, die ausgelöst werden kann, um Daten anzuzeigen, die in anderen Tabellen gespeichert sind. Mit anderen Worten, Views sind benutzerdefinierte virtuelle Tabellen. Ansichten können verwendet werden für:
- Verbessern Sie die Datenbanksicherheit. Wenn Ihre Datenbank vertrauliche Informationen enthält, die gesichert werden müssen, hilft Ihnen die Verwendung einer Ansicht beim Isolieren der Daten. Eine Ansicht kann mit einem vordefinierten Ergebnissatz erstellt werden, und Sie können Benutzern nur Zugriff auf diese Ansicht gewähren, anstatt auf die Tabelle, die vertrauliche Informationen enthält.
- Verschieben Sie komplexe Geschäftslogik auf den Datenbankserver. Anstatt häufig genutzte Softwarelogik in verschiedenen Clients zu codieren, kann ein Entwickler die Logik über eine View in die Datenbankebene verlagern. Beispielsweise kann eine Ansicht erstellt werden, um Kundenklassifikationen in Abhängigkeit von ihrem Gesamtumsatz anzuzeigen.
- Datenablenkung reduzieren. Eine Ansicht kann Ergebnisse aus verschiedenen Tabellen kombinieren und nur die relevanten Spalten anzeigen, wenn sie aufgerufen wird.
In diesem Handbuch erfahren Sie:
- Wie die Syntax einer MySQL-Ansicht aufgebaut ist.
- So erstellen Sie eine MySQL-Ansicht.
- So rufen Sie eine MySQL-Ansicht auf.
- Wie man eine Ansicht in MySQL löscht.
Bevor Sie beginnen
Um dieser Anleitung zu folgen, stellen Sie sicher, dass Sie Folgendes haben:
-
Ein Linode, auf dem Sie die MySQL-Software ausführen. Sie können dem Leitfaden Erste Schritte mit Linode folgen, um einen Linode bereitzustellen.
-
Die MySQL-Serversoftware (oder MariaDB), die auf Ihrem Linode installiert ist. Bitte lesen Sie den MySQL-Abschnitt, der Anleitungen enthält, die beschreiben, wie MySQL auf mehreren Linux-Distributionen installiert wird.
Vorbereiten der Datenbank
Bevor Sie Ihre MySQL-Ansichten erstellen, erstellen Sie eine Beispieldatenbank, definieren Sie einige Tabellen und füllen Sie sie zuerst mit einigen Daten:
-
SSH zu Ihrem Linode. Geben Sie dann diesen Befehl ein, um sich bei MySQL als Root-Benutzer anzumelden:
mysql -u root -p
Wenn Sie dazu aufgefordert werden, geben Sie das Root-Passwort Ihres MySQL-Servers ein und drücken Sie Enter um fortzufahren.
Hinweis
Wenn Ihr Passwort nicht akzeptiert wird, müssen Sie möglicherweise den vorherigen Befehl mit
sudo
ausführen :sudo mysql -u root -p
-
Wenn Ihr Passwort akzeptiert wird, sollten Sie die MySQL-Eingabeaufforderung sehen:
mysql >
Hinweis
Wenn Sie MariaDB verwenden, sehen Sie möglicherweise stattdessen eine Eingabeaufforderung wie die folgende:
MariaDB [(none)]>
-
Führen Sie als Nächstes diesen SQL-Befehl aus, um eine Beispieldatenbank mit dem Namen
sample_database
zu erstellen :CREATE DATABASE sample_database;
Sie sollten diese Ausgabe sehen, die bestätigt, dass die Datenbank erfolgreich erstellt wurde:
Query OK, 1 row affected (0.02 sec)
-
Wählen Sie
sample_database
aus Datenbank:USE sample_database;
Sie sollten diese Ausgabe sehen:
Database changed
-
Führen Sie diesen Befehl aus, um einen
customers
zu erstellen Tabelle:CREATE TABLE customers ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(50) ) ENGINE = InnoDB;
Sie sollten diese Ausgabe sehen:
Query OK, 0 rows affected (0.07 sec)
-
Füllen Sie als Nächstes die
customers
aus Tabelle mit drei Datensätzen. Führen Sie das folgendeINSERT
aus Befehle nacheinander:INSERT INTO customers (customer_name) VALUES ('Leslie'); INSERT INTO customers (customer_name) VALUES ('Andy'); INSERT INTO customers (customer_name) VALUES ('Ben');
Die folgende Ausgabe wird nach dem Einfügen jedes Datensatzes angezeigt:
Query OK, 1 row affected (0.08 sec) ...
-
Stellen Sie sicher, dass die Beispieldatensätze in die Datenbank eingefügt wurden, indem Sie diesen
SELECT
ausführen Befehl:SELECT * FROM customers;
Es erscheint diese Ausgabe, die bestätigt, dass die Daten im vorherigen Schritt erfolgreich eingefügt wurden:
+-------------+---------------+ | customer_id | customer_name | +-------------+---------------+ | 1 | Leslie | | 2 | Andy | | 3 | Ben | +-------------+---------------+ 3 rows in set (0.01 sec)
-
Erstellen Sie als Nächstes einen
sales
Tisch. Führen Sie diesen Befehl aus:CREATE TABLE sales ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, monthly_sales DECIMAL(17,2) ) ENGINE = InnoDB;
Diese Ausgabe erscheint:
Query OK, 0 rows affected (0.07 sec)
-
Fügen Sie dann einige Daten zu den
sales
hinzu Tisch. Führen Sie diese Befehle nacheinander aus:INSERT INTO sales (customer_id, monthly_sales) VALUES ('1','500.27'); INSERT INTO sales (customer_id, monthly_sales) VALUES ('2','7600.32'); INSERT INTO sales (customer_id, monthly_sales) VALUES ('3', '25879.63');
Nach dem Einfügen jedes Verkaufsdatensatzes erscheint diese Ausgabe:
Query OK, 1 row affected (0.01 sec) ...
-
Führen Sie als Nächstes ein
SELECT
aus Abfrage, um zu überprüfen, ob die Verkaufsdaten in die Tabelle eingefügt wurden:SELECT * FROM sales;
Diese Ausgabe erscheint, die bestätigt, dass die Verkaufsdaten im vorherigen Schritt erfolgreich eingefügt wurden:
+-------------+---------------+ | customer_id | monthly_sales | +-------------+---------------+ | 1 | 500.27 | | 2 | 7600.32 | | 3 | 25879.63 | +-------------+---------------+ 3 rows in set (0.00 sec)
Sie haben die Datenbank und die zu bearbeitenden Tabellen definiert. Der nächste Abschnitt beschreibt die Syntax einer MySQL-Ansicht.
Die MySQL-Ansichtssyntax
Dies ist eine vereinfachte Version der MySQL-Ansichtssyntax:
CREATE
VIEW view_name
AS select_statement
-
view_name
:Hier muss der Name der MySQL-Ansicht definiert werden. Es empfiehlt sich, einen aussagekräftigen Namen zu verwenden, damit Sie sich später an die Funktion der Ansicht erinnern können. -
select_statement
:Dies ist die SQL-Abfrage, die mit der definierten Ansicht gekoppelt ist. Wenn die Ansicht aufgerufen wird, führt MySQL diese Abfrage aus, um ein Recordset zurückzugeben.
Erstellen einer MySQL-Ansicht
Dieser Abschnitt stellt ein Beispiel für eine MySQL-Ansicht vor. Diese Ansicht wird verwendet, um Kunden aus Ihrer Beispieldatenbank nach der Anzahl ihrer monatlichen Verkäufe zu klassifizieren.
Stellen Sie sicher, dass Sie bei Ihrem MySQL-Server angemeldet sind. Führen Sie dann den folgenden Befehl aus, um eine customers_membership
zu erstellen Ansicht:
CREATE
VIEW customers_membership
AS SELECT sales.customer_id,
customer_name,
(IF(sales.monthly_sales >= 5000, 'PREMIUM', 'BASIC')) as membership
FROM sales
LEFT JOIN customers
ON sales.customer_id = customers.customer_id;
Wenn die Ansicht erfolgreich erstellt wurde, sollten Sie die unten gezeigte Ausgabe sehen:
Query OK, 0 rows affected (0.01 sec)
Der obige MySQL-Befehl erstellt eine Ansicht mit dem Namen customers_membership
das sich den customers
anschließt und sales
Tabelle mit dem PRIMARY KEY
customer_id
. Der logische IF(expression, value_if_true, value_if_false)
Kontoauszugslogik wird verwendet, um die Mitgliedschaft des Kunden aus seinen monatlichen Verkäufen zu bestimmen:
-
Wenn der Umsatz eines Kunden 5.000 oder mehr beträgt, klassifiziert die Ansicht den Kunden als
PREMIUM
Mitglied. -
Andernfalls (wenn die Verkäufe unter
5,000
liegen ) wird der Kunde alsBASIC
eingestuft Mitglied.
Die customers_membership
Die Ansicht ist jetzt in der Datenbank gespeichert. Der nächste Abschnitt zeigt, wie man eine MySQL-Ansicht aufruft und ein Recordset anzeigt, ohne die Basistabellen direkt abzufragen.
Aufrufen einer MySQL-Ansicht
Dieser Abschnitt zeigt, wie Sie die oben erstellte MySQL-Ansicht aufrufen und bestätigen, dass sie wie erwartet funktioniert. Sobald eine Ansicht erstellt wurde, ist sie als Datenbankobjekt sichtbar und kann mit SELECT
aufgerufen werden Aussage.
-
Zum Aufrufen der
customers_membership
ansehen, ausführen:SELECT * FROM customers_membership;
Wenn die Ansicht wie erwartet funktioniert, sollten Sie jetzt eine Liste der Kunden mit ihrer generierten
membership
sehen Werte basierend auf ihren Verkäufen. SeitLeslie
der Umsatz von unter 5000 (500,27) lag, gibt die Ansicht die Mitgliedschaft des Kunden alsBASIC
aus .Andy
undBen
Die Verkäufe von lagen bei 7600,32 bzw. 25879,63 und das macht sie zuPREMIUM
Mitglieder:+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | +-------------+---------------+------------+ 3 rows in set (0.00 sec)
-
Sobald die Daten einer Basistabelle aktualisiert wurden und Sie erneut eine MySQL-Ansicht aufrufen, sollten Sie die neuesten Informationen sehen. Ansichten ziehen Informationen aus ihren Basistabellen und speichern die Daten nicht. Um zu demonstrieren, wie eine Ansicht aktualisierte Informationen aus den Basistabellen abruft, fügen Sie einen weiteren Kunden namens
Rajie
hinzu an diecustomers
Tabelle:INSERT INTO customers (customer_name) VALUES ('Rajie');
Diese Ausgabe erscheint:
Query OK, 1 row affected (0.01 sec)
-
Fügen Sie dann die monatlichen Verkaufsinformationen des Kunden zur Verkaufstabelle hinzu:
INSERT INTO sales (customer_id, monthly_sales) VALUES ('4', '147.41');
Diese Ausgabe erscheint:
Query OK, 1 row affected (0.01 sec)
-
Rufen Sie als Nächstes
customers_membership
auf erneut ansehen:SELECT * FROM customers_membership;
Die folgende Ausgabe wird angezeigt, die bestätigt, dass die Ansicht Änderungen erfassen und die Informationen der neuen Kunden wie erwartet abrufen kann:
+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | | 4 | Rajie | BASIC | +-------------+---------------+------------+ 4 rows in set (0.00 sec)
Wie Sie im Ansichtsdatensatz oben sehen können, haben Sie jetzt einen neuen Kunden namens
Rajie
mit einemBASIC
Mitgliedschaft.
Löschen einer MySQL-Ansicht
Genau wie andere Datenbankobjekte können Sie Ansichten löschen, wenn Sie sie nicht mehr benötigen. Dies ist die grundlegende Syntax zum Löschen einer MySQL-Ansicht:
DROP VIEW IF EXISTS view_name;
-
Bevor Sie eine MySQL-Ansicht löschen, identifizieren Sie zuerst ihren Namen, indem Sie den folgenden Befehl ausführen:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Eine Liste aller Ansichten in der aktuell ausgewählten Datenbank wird angezeigt:
+---------------------------+------------+ | Tables_in_sample_database | Table_type | +---------------------------+------------+ | customers_membership | VIEW | +---------------------------+------------+ 1 row in set (0.01 sec)
-
In diesem Fall lautet der Name der Ansicht, die Sie löschen möchten,
customers_membership
. Um es also zu löschen, führen Sie Folgendes aus:DROP VIEW IF EXISTS customers_membership;
Stellen Sie sicher, dass die folgende Ausgabe angezeigt wird, nachdem die Ansicht aus der Datenbank gelöscht wurde:
Query OK, 0 rows affected (0.01 sec)
Hinweis Bitte beachten Sie, wenn Sie versuchen, eine MySQL-Ansicht zu löschen, die nicht existiert, ohne den
IF EXISTS
zu verwenden Schlüsselwort gibt MySQL einen Fehler aus. -
Wenn der Befehl aus Schritt 1 erneut ausgeführt wird, sollte es jetzt keine Ergebnisse geben:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Empty set (0.000 sec)
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- MySQL - Verwenden von Ansichten