Zoeken…


Syntaxis

  • CREËER WEERGAVE view_name AS SELECT kolomnaam (len) UIT tabelnaam WHERE staat; /// Eenvoudige syntaxis voor het maken van weergaven

  • CREËREN [OF VERVANGEN] [ALGORITHM = {ONGEDEFINIEERD | MERGE | TEMPTABLE}] [DEFINER = {user | CURRENT_USER}] [SQL SECURITY {DEFINER | INVOKER}] BEKIJK view_name [(column_list)] AS select_statement [WITH [CASCADED | LOKAAL] OPTIE CONTROLEREN]; /// Volledige weergave syntaxis maken

  • DROP VIEW [IF EXISTS] [db_name.] View_name; /// Syntaxis van Drop view

parameters

parameters Details
view_name Naam van weergave
SELECT-verklaring SQL-instructies die in de views moeten worden opgenomen. Het kan een SELECT-instructie zijn om gegevens op te halen uit een of meer tabellen.

Opmerkingen

Weergaven zijn virtuele tabellen en bevatten niet de gegevens die worden geretourneerd. Ze kunnen u redden van het opnieuw en opnieuw schrijven van complexe vragen.

  • Voordat een view wordt gemaakt, bestaat de specificatie volledig uit een SELECT instructie. De SELECT instructie kan geen subquery bevatten in de clausule FROM.
  • Als een weergave eenmaal is gemaakt , wordt deze grotendeels gebruikt als een tabel en kan worden SELECT uit een tabel.

U moet weergaven maken, wanneer u enkele kolommen van uw tabel wilt beperken, van de andere gebruiker.

  • Bijvoorbeeld: in uw organisatie wilt u dat uw managers weinig informatie bekijken uit een tabel met de naam "Verkoop", maar u wilt niet dat uw software-ingenieurs alle velden van de tabel "Verkoop" kunnen bekijken. Hier kunt u twee verschillende weergaven maken voor uw managers en uw software-ingenieurs.

Prestaties . VIEWs zijn syntactische suiker. De prestaties kunnen echter wel of niet slechter zijn dan de equivalente zoekopdracht met de selectie van de weergave ingeklapt. De Optimizer probeert dit voor u "in te klappen", maar is niet altijd succesvol. MySQL 5.7.6 biedt nog enkele verbeteringen in de Optimizer. Maar hoe dan ook, het gebruik van een VIEW zal geen snellere zoekopdracht genereren.

Maak een weergave

privileges

De instructie CREATE VIEW vereist de machtiging CREATE VIEW voor de weergave en enige machtiging voor elke kolom die is geselecteerd door de SELECT-instructie. Voor kolommen die elders in de SELECT-instructie worden gebruikt, moet u de SELECT-machtiging hebben. Als de OR-VERVANG-clausule aanwezig is, moet u ook de DROP-machtiging hebben voor de weergave. CREATE VIEW vereist mogelijk ook het SUPER-privilege, afhankelijk van de DEFINER-waarde, zoals verderop in deze sectie wordt beschreven.

Wanneer naar een weergave wordt verwezen, vindt controle van bevoegdheden plaats.

Een weergave hoort bij een database. Standaard wordt een nieuwe weergave gemaakt in de standaarddatabase. Gebruik een volledig gekwalificeerde naam om de weergave expliciet in een bepaalde database te maken

Bijvoorbeeld:

db_name.view_name

mysql> CREATE VIEW test.v AS SELECT * FROM t;

Opmerking - In een database hebben basistabellen en views dezelfde naamruimte, dus een basistabel en een view kunnen niet dezelfde naam hebben.

A VIEW kan:

  • worden gemaakt van vele soorten SELECT-instructies
  • verwijzen naar basistabellen of andere aanzichten
  • gebruik joins, UNION en subquery's
  • SELECT hoeft niet eens naar tabellen te verwijzen

Een ander voorbeeld

In het volgende voorbeeld wordt een weergave gedefinieerd die twee kolommen uit een andere tabel selecteert, evenals een uitdrukking die wordt berekend op basis van die kolommen:

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

beperkingen

  • Vóór MySQL 5.7.7 kan de SELECT-instructie geen subquery bevatten in de clausule FROM.
  • De SELECT-instructie kan niet verwijzen naar systeemvariabelen of door de gebruiker gedefinieerde variabelen.
  • Binnen een opgeslagen programma kan de SELECT-instructie niet verwijzen naar programmaparameters of lokale variabelen.
  • De SELECT-instructie kan niet verwijzen naar voorbereide instructieparameters.
  • Elke tabel of weergave waarnaar in de definitie wordt verwezen, moet bestaan. Nadat de weergave is gemaakt, is het mogelijk om een tabel neer te zetten of te bekijken
    de definitie verwijst naar. In dit geval resulteert het gebruik van de weergave in een fout. Gebruik de instructie CHECK TABLE om een viewdefinitie voor dit soort problemen te controleren.
  • De definitie kan niet verwijzen naar een TIJDELIJKE tabel en u kunt dat niet
    maak een TIJDELIJK beeld.
  • U kunt een trigger niet aan een weergave koppelen.
  • Aliassen voor kolomnamen in de SELECT-instructie worden gecontroleerd tegen de maximale kolomlengte van 64 tekens (niet de maximale alias
    lengte van 256 tekens).
  • Een VIEW kan al dan niet optimaliseren evenals het equivalent SELECT . Het is onwaarschijnlijk dat het beter zal optimaliseren.

Een weergave vanuit twee tabellen

Een weergave is het handigst wanneer deze kan worden gebruikt om gegevens uit meer dan één tabel op te halen.

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 worden weergaven niet gematerialiseerd. Als u nu de eenvoudige zoekopdracht SELECT * FROM myview , voert mysql daadwerkelijk de LEFT JOIN achter de scène uit.

Een eenmaal gemaakte weergave kan worden samengevoegd met andere weergaven of tabellen

Een tabel bijwerken via een UITZICHT

A VIEW werkt heel erg als een tafel. Hoewel u een tabel kunt UPDATE , kunt u een weergave in die tabel al dan niet bijwerken. Als de SELECT in de weergave complex genoeg is om een tijdelijke tabel te vereisen, is UPDATE algemeen niet toegestaan.

Zaken als GROUP BY , UNION , HAVING , DISTINCT en sommige subquery's verhinderen dat de weergave kan worden bijgewerkt. Details in referentiehandleiding .

EEN UITZICHT DALEND

- Maak een weergave en zet deze neer in de huidige database.

CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;

- Maak en zet een weergave met een verwijzing naar een tabel in een andere database.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow