Hier erkläre ich, was MySQL "Views" sind und wie man sie benutzt.
MySQL bietet uns die Möglichkeit, Ansichten zu erstellen . Eine Ansicht ist als gespeicherte Abfrage definiert, die beim Aufrufen eine Ergebnismenge erzeugt. Einige Leute beziehen sich auf Ansichten als "virtuelle Tabellen".
Klar wie Schlamm? Versuchen wir es noch einmal.
Was ist eine Ansicht?
Eine Ansicht ist eine Abfrage, die Sie in der Datenbank speichern. Sie können es dann später ausführen, indem Sie einfach diese Ansicht aufrufen (anstatt die Abfrage erneut zu schreiben).
Die Ansicht könnte aus einer komplexen Abfrage bestehen, die Ergebnisse werden jedoch so dargestellt, als wäre es eine Tabelle. Daher können Sie die Ansicht abfragen, als wäre es eine Tabelle.
Beispielsweise könnten Sie eine komplexe Abfrage haben, die Daten aus drei verschiedenen Tabellen auswählt. Sie könnten diese komplexe Abfrage entweder jedes Mal eingeben, wenn Sie sie ausführen müssen, oder Sie könnten die Abfrage als Ansicht speichern. Sobald es als Ansicht gespeichert wurde, können Sie ein einfaches SELECT
ausführen -Anweisung, um die Ergebnisse der komplexen Abfrage zurückzugeben. Aber natürlich könnten Sie bei Bedarf auch eine komplexe Abfrage gegen die Ansicht schreiben.
Ansicht erstellen
Das Erstellen von Ansichten ist sehr einfach. Sie stellen Ihrer Abfrage einfach eine Codezeile voran und führen sie aus. Die Ansicht wird sofort in Ihrer Datenbank erstellt.
Syntax
Um eine Ansicht zu erstellen, geben Sie die folgende Anweisung ein, gefolgt von der Abfrage:
CREATE VIEW view_name AS
Ersetzen Sie view_name mit dem Namen, den Sie für die Ansicht verwenden möchten.
Beispiel
Wenn wir den folgenden Code gegen den FruitShop ausführen Datenbank:
CREATE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Wir sehen jetzt eine Ansicht namens vFruitInventory unter Ansichten aufgelistet (Möglicherweise müssen Sie auf Aktualisieren klicken Schaltfläche für die SCHEMAS Menü zuerst):
Es ist eine gute Idee, sich eine Namenskonvention für Ihre Ansichten auszudenken (wie für jedes andere Datenbankobjekt) und sich daran zu halten. Viele Entwickler stellen ihren Ansichtsnamen das Präfix v
voran , vw
, v_
oder vw_
damit es einfacher ist, Ansichten von Tabellen in ihren Abfragen zu unterscheiden. Andere Entwickler sind jedoch mit dieser Konvention nicht einverstanden und ziehen es vor, dass ihre Tabellen- und Ansichtsnamen austauschbar sind.
Abfrage einer Ansicht
Jetzt können wir die Ansicht genauso abfragen, wie wir eine Tabelle abfragen würden:
SELECT * FROM vFruitInventory;
Ergebnis:
Natürlich können wir auch eine spezifischere Abfrage verwenden. Zum Beispiel dieser, der nur die Datensätze auswählt, bei denen der Bestand größer oder kleiner als 10 ist:
SELECT FruitName FROM vFruitInventory WHERE Inventory <= 10;
Aber wir können nicht Abfragespalten, auf die in der Ansicht nicht verwiesen wird (selbst wenn sie sich in den zugrunde liegenden Tabellen befinden, die die Ansicht abfragt).
Beispielsweise können wir Fruit abfragen Tabelle wie folgt:
SELECT * FROM Fruit WHERE FruitId = 1;
Aber wir können das obige vFruitInventory nicht abfragen so anzeigen:
SELECT * FROM vFruitInventory WHERE FruitId = 1;
Dies liegt daran, dass die Ansicht die FruitId nicht zurückgibt Säule. Wir haben die genauen Spalten in der Ansicht angegeben und das sind alle, die zurückgegeben werden. Wie bereits erwähnt, ist die Ergebnismenge der Ansicht genau wie eine Tabelle und wird von einigen gerne als "virtuelle Tabelle" bezeichnet. Wenn die "Tabelle" diese Spalten nicht enthält, können Sie sie nicht abfragen.
Dies ist keine Einschränkung, sondern eine Funktion von Ansichten. Diese Funktion bedeutet, dass wir Benutzern Zugriff auf einige gewähren können Spalten einer Tabelle, aber nicht andere (über die Ansicht). Mit anderen Worten, wir können einem Benutzer Zugriff auf eine Ansicht gewähren, ohne diesem Benutzer Zugriff auf die zugrunde liegenden Tabellen zu gewähren, auf die die Ansicht zugreift. Einige Tabellen speichern möglicherweise vertrauliche Informationen, auf die der Benutzer nicht zugreifen darf. Aber dieselben Tabellen können auch nicht-sensible Informationen speichern, die sie benötigen zugreifen. Was ist zu tun? Erstellen Sie eine Ansicht! Und diese Ansicht kann nur die nicht vertraulichen Informationen aus diesen Tabellen auswählen.
Ändern einer Ansicht
Hier sind zwei verschiedene Methoden, um Ihre Ansicht zu ändern.
Möglichkeit 1:Verwenden Sie ALTER VIEW
Aussage
Sie können eine Ansicht ändern, indem Sie ALTER VIEW
verwenden Erklärung. So:
ALTER VIEW view_name AS
Ersetzen Sie view_name mit dem Namen der Ansicht, die Sie ändern möchten.
Beispiel
Lassen Sie uns die Fruit.FruitId hinzufügen Feld zur Ansicht:
ALTER VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Wenn wir nun versuchen, die FruitId zurückzugeben Feld in unseren Abfragen erhalten wir Ergebnisse.
Beachten Sie jedoch, dass wir nicht versuchen können, auf dieses Feld als Fruit.FruitId
zuzugreifen . Wir können darauf nur als FruitId
zugreifen . Und so soll es sein. Schließlich ist die Ansicht eine "virtuelle Tabelle" und wir müssen die Struktur der Tabellen, die sie abfragt, nicht kennen.
Option 2:Verwenden Sie CREATE OR REPLACE
Beachten Sie, dass die Ansicht vorhanden sein muss, bevor Sie ALTER VIEW
ausführen Erklärung. Wenn es nicht vorhanden ist, erhalten Sie eine Fehlermeldung. Sie können dieses Problem vermeiden, indem Sie CREATE OR REPLACE
verwenden Erklärung. Dadurch wird die Ansicht erstellt, falls sie nicht existiert, oder sie wird ersetzt, falls sie vorhanden ist.
Wir hätten die obige Ansicht also so erstellen können:
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Und dann könnten wir es aktualisieren, indem wir denselben CREATE OR REPLACE
verwenden Anweisung, sondern ändert nur die Definition. Fügen Sie beispielsweise Fruit.FruitId
hinzu Feld:
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Eine Ansicht löschen
Sie können eine Ansicht löschen, indem Sie DROP VIEW
verwenden Erklärung. So:
DROP VIEW vFruitInventory
Die obige Anweisung entfernt die Ansicht namens vFruitInventory .
Mehrere Aufrufe löschen
Sie können mehrere Ansichten mit demselben DROP VIEW
löschen Erklärung. Trennen Sie einfach jeden Ansichtsnamen durch ein Komma. So:
DROP VIEW view_1, view_2 ...
Der IF EXISTS
Klausel
Sie können auch den IF EXISTS
verwenden -Klausel, um zu verhindern, dass ein Fehler auftritt, wenn eine Ansicht nicht vorhanden ist:
DROP VIEW IF EXISTS view_1, view_2 ...