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. Die SELECT 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 entsprechende SELECT 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;


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow