Wer kann eine Ansicht erstellen?
Die CREATE VIEW
-Anweisung kann ausgeführt werden durch:
-
Benutzer mit dem Privileg
CREATE VIEW
Der Ersteller einer Ansicht wird ihr Eigentümer.
Um eine Ansicht zu erstellen, benötigt ein Nicht-Administrator-Benutzer außerdem mindestens 'SELECT'-Zugriff auf die zugrunde liegende(n) Tabelle(n) und/oder Ansicht(en) und das 'EXECUTE'-Privileg für alle beteiligten auswählbaren gespeicherten Prozeduren.
Um Einfügungen, Aktualisierungen und Löschungen über die Ansicht zu ermöglichen, muss der Ersteller/Eigentümer auch die entsprechenden INSERT
, UPDATE
und DELETE
-Rechte für das/die zugrunde liegende(n) Objekt(e) besitzen.
Anderen Benutzern Berechtigungen für die Ansicht zu erteilen ist nur möglich, wenn der Ansichtsbesitzer diese Berechtigungen für die zugrunde liegenden Objekte hat WITH GRANT OPTION
.Dies ist immer dann der Fall, wenn der View-Eigentümer auch der Eigentümer der zugrunde liegenden Objekte ist.
===Beispiele für das Erstellen von Ansichten
-
Erstellen einer Ansicht, die die Spalten
JOB_CODE
undJOB_TITLE
nur für die Jobs zurückgibt, bei denenMAX_SALARY
weniger als 15.000 USD beträgt.CREATE VIEW ENTRY_LEVEL_JOBS AS SELECT JOB_CODE, JOB_TITLE FROM JOB WHERE MAX_SALARY < 15000;
-
Erstellen einer Ansicht, die die Spalten
JOB_CODE
undJOB_TITLE
nur für Jobs zurückgibt, bei denenMAX_SALARY
weniger als 15.000 USD beträgt.Immer wenn ein neuer Datensatz eingefügt oder ein vorhandener Datensatz aktualisiert wird, wird die BedingungMAX_SALARY < 15000
geprüft.Wenn die Bedingung nicht wahr ist, wird die Einfüge-/Aktualisierungsoperation abgelehnt.CREATE VIEW ENTRY_LEVEL_JOBS AS SELECT JOB_CODE, JOB_TITLE FROM JOB WHERE MAX_SALARY < 15000 WITH CHECK OPTION;
-
Erstellen einer Ansicht mit einer expliziten Spaltenliste.
CREATE VIEW PRICE_WITH_MARKUP ( CODE_PRICE, COST, COST_WITH_MARKUP ) AS SELECT CODE_PRICE, COST, COST * 1.1 FROM PRICE;
-
Erstellen einer View mit Hilfe von Aliasen für Felder in der
SELECT
-Anweisung (das gleiche Ergebnis wie in Beispiel 3).CREATE VIEW PRICE_WITH_MARKUP AS SELECT CODE_PRICE, COST, COST * 1.1 AS COST_WITH_MARKUP FROM PRICE;
-
Erstellen einer schreibgeschützten Ansicht basierend auf zwei Tabellen und einer gespeicherten Prozedur.
CREATE VIEW GOODS_PRICE AS SELECT goods.name AS goodsname, price.cost AS cost, b.quantity AS quantity FROM goods JOIN price ON goods.code_goods = price.code_goods LEFT JOIN sp_get_balance(goods.code_goods) b ON 1 = 1;