MySQL
AUSSICHT
Suche…
Syntax
CREATE VIEW view_name AS SELECT Spaltenname (s) FROM Tabellenname WHERE-Bedingung; /// Einfache Ansichtssyntax
ERSTELLEN [ODER ERSETZEN] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = {Benutzer | CURRENT_USER}] [SQL SECURITY {DEFINER | INVOKER}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]; /// Vollständige Ansichtssyntax erstellen
DROP VIEW [IF EXISTS] [Datenbankname.] Ansichtsname; /// Ansichtssyntax löschen
Parameter
Parameter | Einzelheiten |
---|---|
Ansichtsname | Name der Ansicht |
SELECT-Anweisung | SQL-Anweisungen, die in die Ansichten gepackt werden sollen. Es kann eine SELECT-Anweisung sein, um Daten aus einer oder mehreren Tabellen abzurufen. |
Bemerkungen
Views sind virtuelle Tabellen und enthalten nicht die zurückgegebenen Daten. Sie können Sie davon abhalten, immer wieder komplexe Abfragen zu schreiben.
- Bevor eine Ansicht erstellt wird, besteht ihre Angabe ausschließlich aus einer
SELECT
Anweisung. DieSELECT
Anweisung darf keine Unterabfrage in der FROM-Klausel enthalten. - Sobald eine Ansicht wird es weitgehend wie eine Tabelle gerade verwendet wird und sein kann
SELECT
ed aus wie ein Tisch.
Sie müssen Ansichten erstellen, wenn Sie einige Spalten Ihrer Tabelle vom anderen Benutzer einschränken möchten.
- Beispiel: In Ihrer Organisation möchten Sie, dass Ihre Manager nur wenige Informationen aus einer Tabelle mit dem Namen "Verkauf" anzeigen. Sie möchten jedoch nicht, dass Ihr Softwareentwickler alle Felder der Tabelle "Verkauf" anzeigen kann. Hier können Sie zwei verschiedene Ansichten für Ihre Manager und Ihre Software-Ingenieure erstellen.
Leistung . VIEWs
sind syntaktischer Zucker. Die Leistung kann jedoch möglicherweise schlechter sein als die entsprechende Abfrage, bei der die Auswahl der Ansicht eingeklappt ist. Der Optimierer versucht, dies für Sie "einzuklappen", ist jedoch nicht immer erfolgreich. MySQL 5.7.6 enthält einige weitere Verbesserungen im Optimierer. Die Verwendung einer VIEW
erzeugt jedoch keine schnellere Abfrage.
Erstellen Sie eine Ansicht
Privilegien
Die CREATE VIEW-Anweisung erfordert das CREATE VIEW-Privileg für die Ansicht und einige Privilegien für jede von der SELECT-Anweisung ausgewählte Spalte. Für Spalten, die an anderer Stelle in der SELECT-Anweisung verwendet werden, müssen Sie über das SELECT-Privileg verfügen. Wenn die OR REPLACE-Klausel vorhanden ist, müssen Sie auch über das DROP-Privileg für die Ansicht verfügen. CREATE VIEW erfordert möglicherweise auch das SUPER-Privileg, abhängig vom DEFINER-Wert, wie weiter unten in diesem Abschnitt beschrieben.
Wenn auf eine Ansicht verwiesen wird, erfolgt eine Berechtigungsprüfung.
Eine Ansicht gehört zu einer Datenbank. Standardmäßig wird eine neue Ansicht in der Standarddatenbank erstellt. Verwenden Sie einen vollständig qualifizierten Namen, um die Ansicht explizit in einer bestimmten Datenbank zu erstellen
Zum Beispiel:
db_name.view_name
mysql> CREATE VIEW test.v AS SELECT * FROM t;
Hinweis - In einer Datenbank haben Basistabellen und Views denselben Namespace, sodass eine Basistabelle und eine View nicht denselben Namen haben können.
Ein Blick kann:
- aus vielen Arten von SELECT-Anweisungen erstellt werden
- beziehen Sie sich auf Basistabellen oder andere Ansichten
- Verwenden Sie Joins, UNION und Unterabfragen
- SELECT muss sich nicht einmal auf Tabellen beziehen
Ein anderes Beispiel
Im folgenden Beispiel wird eine Ansicht definiert, in der zwei Spalten aus einer anderen Tabelle sowie ein aus diesen Spalten berechneter Ausdruck ausgewählt werden:
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+
Beschränkungen
- Vor MySQL 5.7.7 darf die SELECT-Anweisung keine Unterabfrage in der FROM-Klausel enthalten.
- Die SELECT-Anweisung kann sich nicht auf Systemvariablen oder benutzerdefinierte Variablen beziehen.
- In einem gespeicherten Programm kann sich die SELECT-Anweisung nicht auf Programmparameter oder lokale Variablen beziehen.
- Die SELECT-Anweisung kann sich nicht auf vorbereitete Anweisungsparameter beziehen.
- Jede Tabelle oder Sicht, auf die in der Definition verwiesen wird, muss vorhanden sein. Nachdem die Ansicht erstellt wurde, ist es möglich, eine Tabelle oder Ansicht zu löschen
Die Definition bezieht sich auf. In diesem Fall führt die Verwendung der Ansicht zu einem Fehler. Um eine Sichtdefinition auf Probleme dieser Art zu überprüfen, verwenden Sie die Anweisung CHECK TABLE. - Die Definition kann sich nicht auf eine TEMPORARY-Tabelle beziehen, und Sie können nicht
Erstellen Sie eine TEMPORARY-Ansicht. - Sie können einen Auslöser keiner Sicht zuordnen.
- Aliase für Spaltennamen in der SELECT-Anweisung werden gegen die maximale Spaltenlänge von 64 Zeichen (nicht den maximalen Alias) geprüft
Länge von 256 Zeichen). - Ein
VIEW
kann genauso gut wie das entsprechendeSELECT
optimiert werden. Eine Optimierung ist unwahrscheinlich.
Ein Blick aus zwei Tabellen
Eine Ansicht ist am nützlichsten, wenn Daten aus mehr als einer Tabelle abgerufen werden können.
CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a
LEFT OUTER JOIN other_table b
ON a.id = b.id
In MySQL werden Ansichten nicht materialisiert. Wenn Sie jetzt die einfache Abfrage SELECT * FROM myview
ausführen, führt mysql den LEFT JOIN hinter der Szene aus.
Eine einmal erstellte Ansicht kann mit anderen Ansichten oder Tabellen verbunden werden
Aktualisieren einer Tabelle über einen VIEW
Eine VIEW
verhält sich sehr ähnlich wie eine Tabelle. Obwohl Sie eine Tabelle UPDATE
können, können Sie eine Sicht in dieser Tabelle möglicherweise nicht aktualisieren. Wenn das SELECT
in der Ansicht komplex genug ist, um eine temporäre Tabelle zu benötigen, ist UPDATE
im Allgemeinen nicht zulässig.
Dinge wie GROUP BY
, UNION
, HAVING
, DISTINCT
und einige Unterabfragen verhindern, dass die Ansicht aktualisierbar ist. Details im Referenzhandbuch .
EINE ANSICHT ENTFERNEN
- Erstellen Sie eine Ansicht in der aktuellen Datenbank und legen Sie sie dort ab.
CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;
- Erstellen und löschen Sie eine Ansicht, die auf eine Tabelle in einer anderen Datenbank verweist.
CREATE VIEW table_from_other_db AS SELECT x FROM db1.foo WHERE x IS NOT NULL;
DROP VIEW table_from_other_db;