Sök…


Syntax

  • CREATE VIEW view_name AS SELECT column_name (s) FRÅN tabellnamn VAR villkor; /// Enkel skapa syntax

  • SKAPA [ELLER Byt ut] [ALGORITHM = {ODEFINERAD | FÖLJA | TEMPTABLE}] [DEFINER = {user | CURRENT_USER}] [SQL SECURITY {DEFINER | INVOKER}] VIEW view_name [(column_list)] AS select_statement [MED [CASCADED | LOCAL] CHECK OPTION]; /// Full Skapa syntax

  • DROP VIEW [IF EXISTS] [db_name.] View_name; /// Syntax för släppvy

parametrar

parametrar detaljer
VIEW_NAME Namn på vy
VÄLJ uttalande SQL-uttalanden som ska packas i vyerna. Det kan vara ett SELECT-uttalande för att hämta data från en eller flera tabeller.

Anmärkningar

Visningar är virtuella tabeller och innehåller inte de data som returneras. De kan spara dig från att skriva komplexa frågor om och om igen.

  • Innan en vy görs består specifikationen helt av ett SELECT uttalande. SELECT uttalandet kan inte innehålla en undersökning i FROM-klausulen.
  • När en vy har gjorts används den till stor del precis som ett bord och kan SELECT redigeras från precis som ett bord.

Du måste skapa vyer från den andra användaren när du vill begränsa några kolumner i tabellen.

  • Till exempel: I din organisation vill du att dina chefer ska se få information från en tabell med namnet "Försäljning", men du vill inte att dina programvaruingenjörer kan se alla fält i tabellen- "Försäljning". Här kan du skapa två olika vyer för dina chefer och programvaruingenjörer.

Prestanda . VIEWs är syntaktiskt socker. Men prestandan kan vara eller inte vara sämre än den motsvarande frågan med vyns valda vikta in. Optimeringsprogrammet försöker göra detta "fäll in" åt dig, men är inte alltid framgångsrikt. MySQL 5.7.6 ger några fler förbättringar i Optimizer. Men oberoende av att använda en VIEW kommer inte att generera en snabbare fråga.

Skapa en vy

privilegier

CREATE VIEW-uttalandet kräver CREATE VIEW-behörigheten för vyn och vissa privilegier för varje kolumn som väljs av SELECT-satsen. För kolumner som används någon annanstans i SELECT-uttalandet måste du ha SELECT-behörigheten. Om klausulen ELLER Byt ut finns måste du också ha DROP-behörighet för vyn. CREATE VIEW kan också kräva SUPER-privilegiet, beroende på DEFINER-värdet, som beskrivs senare i detta avsnitt.

När det hänvisas till en vy inträffar behörighetskontroll.

En vy tillhör en databas. Som standard skapas en ny vy i standarddatabasen. För att skapa vyn uttryckligen i en given databas, använd ett fullt kvalificerat namn

Till exempel:

db_name.view_name

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

Obs - I en databas delar bastabeller och vyer samma namnutrymme, så en bastabell och en vy kan inte ha samma namn.

En VISNING kan:

  • skapas av många olika SELECT-uttalanden
  • se bastabeller eller andra vyer
  • använda joins, UNION och subqueries
  • SELECT behöver inte ens hänvisa till några tabeller

Ett annat exempel

Följande exempel definierar en vy som väljer två kolumner från en annan tabell samt ett uttryck beräknat från dessa kolumner:

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

begränsningar

  • Före MySQL 5.7.7 kan SELECT-uttalandet inte innehålla en underkälla i FROM-klausulen.
  • SELECT-satsen kan inte hänvisa till systemvariabler eller användardefinierade variabler.
  • Inom ett lagrat program kan SELECT-satsen inte hänvisa till programparametrar eller lokala variabler.
  • SELECT-uttalandet kan inte hänvisa till förberedda uttalandeparametrar.
  • Alla tabeller eller vyer som hänvisas till i definitionen måste finnas. När vyn har skapats är det möjligt att släppa en tabell eller se det
    definitionen hänvisar till. I detta fall leder användningen av vyn till ett fel. Om du vill kontrollera en vydefinition för problem av den här typen använder du uttalet CHECK TABLE.
  • Definitionen kan inte hänvisa till en TEMPORAR tabell, och du kan inte
    skapa en TEMPORARY vy.
  • Du kan inte koppla en trigger till en vy.
  • Aliaser för kolumnnamn i SELECT-satset kontrolleras mot den maximala kolumnlängden på 64 tecken (inte det maximala aliaset
    längd på 256 tecken).
  • En VIEW kan eller inte optimera såväl som motsvarande SELECT . Det är osannolikt att optimera bättre.

En vy från två bord

En vy är mest användbar när den kan användas för att hämta in data från mer än en tabell.

CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a 
LEFT OUTER JOIN other_table b 
ON a.id = b.id

I mysql visas inte vyerna. Om du nu utför den enkla frågan SELECT * FROM myview myview, kommer mysql faktiskt att utföra VÄNSTRE JOIN bakom scenen.

En vy som skapats en gång kan kopplas till andra vyer eller tabeller

Uppdatering av en tabell via en VIEW

En VIEW fungerar mycket som ett bord. Även om du kan UPDATE en tabell kan du kanske eller inte kunna uppdatera en vy till den tabellen. I allmänhet, om SELECT i vyn är tillräckligt komplex för att kräva en temp-tabell, är UPDATE inte tillåtet.

Saker som GROUP BY , UNION , HAVING , DISTINCT och vissa undersökningar förhindrar att vyn kan uppdateras. Detaljer i referensmanualen .

DROPPERA EN UTSIKT

- Skapa och släpp en vy i den aktuella databasen.

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

- Skapa och släpp en vy som refererar till en tabell i en annan databas.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow