Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Ansichten

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 ...