MySQL
WIDOK
Szukaj…
Składnia
UTWÓRZ WIDOK nazwa_widoku JAK WYBIERZ nazwa (-y) kolumny Z nazwy_tabeli GDZIE warunek; /// Proste tworzenie składni widoku
UTWÓRZ [LUB WYMIENIJ] [ALGORYTM = {NIEZDEFINIOWANY | ŁĄCZENIE | TEMPTABLE}] [DEFINER = {użytkownik | CURRENT_USER}] [SQL SECURITY {DEFINER | INVOKER}] WIDOK nazwa_widoku [(lista_kolumn)] JAKO select_statement [Z [KASKADOWANY | LOKALNIE] SPRAWDŹ OPCJĘ]; /// Pełna Utwórz składnię widoku
WIDOK DROP [JEŚLI ISTNIEJE] [nazwa_bazy.] Nazwa_widoku; /// Opuść składnię widoku
Parametry
Parametry | Detale |
---|---|
nazwa_widoku | Nazwa widoku |
Instrukcja SELECT | Instrukcje SQL do spakowania w widokach. Może to być instrukcja SELECT do pobierania danych z jednej lub więcej tabel. |
Uwagi
Widoki są tabelami wirtualnymi i nie zawierają zwracanych danych. Mogą cię uratować przed ciągłym pisaniem złożonych zapytań.
- Przed utworzeniem widoku jego specyfikacja składa się całkowicie z instrukcji
SELECT
. InstrukcjaSELECT
nie może zawierać zapytania podrzędnego w klauzuli FROM. - Po utworzeniu widoku jest on używany w dużej mierze tak samo jak tabela i można go
SELECT
z tabeli.
Musisz utworzyć widoki, gdy chcesz ograniczyć kilka kolumn tabeli od drugiego użytkownika.
- Na przykład: w swojej organizacji chcesz, aby menedżerowie przeglądali kilka informacji z tabeli o nazwie „Sprzedaż”, ale nie chcesz, aby Twoi inżynierowie oprogramowania mogli wyświetlać wszystkie pola tabeli - „Sprzedaż”. Tutaj możesz utworzyć dwa różne widoki dla menedżerów i inżynierów oprogramowania.
Wydajność VIEWs
są cukrem syntaktycznym. Jednak wydajność może być lub może nie być gorsza niż równoważne zapytanie ze złożoną opcją wyboru widoku. Optymalizator próbuje wykonać to „złożenie” dla Ciebie, ale nie zawsze jest to skuteczne. MySQL 5.7.6 zapewnia dodatkowe ulepszenia w Optymalizatorze. Ale niezależnie od tego użycie VIEW
nie wygeneruje szybszego zapytania.
Utwórz widok
Uprawnienia
Instrukcja CREATE VIEW wymaga uprawnienia CREATE VIEW do widoku i niektórych uprawnień dla każdej kolumny wybranej przez instrukcję SELECT. W przypadku kolumn używanych w innym miejscu instrukcji SELECT musisz mieć uprawnienie SELECT. Jeśli istnieje klauzula OR REPLACE, musisz również mieć uprawnienie DROP dla widoku. UTWÓRZ WIDOK może również wymagać uprawnienia SUPER, w zależności od wartości DEFINER, jak opisano w dalszej części tej sekcji.
Podczas odwoływania się do widoku następuje sprawdzenie uprawnień.
Widok należy do bazy danych. Domyślnie nowy widok jest tworzony w domyślnej bazie danych. Aby utworzyć widok jawnie w danej bazie danych, użyj w pełni kwalifikowanej nazwy
Na przykład:
nazwa_bazy. nazwa_widoku
mysql> CREATE VIEW test.v AS SELECT * FROM t;
Uwaga - W bazie danych tabele podstawowe i widoki mają tę samą przestrzeń nazw, więc tabela podstawowa i widok nie mogą mieć tej samej nazwy.
WIDOK może:
- być tworzone z wielu rodzajów instrukcji SELECT
- odnoszą się do tabel podstawowych lub innych widoków
- używaj złączeń, UNION i podkwerend
- SELECT nie musi nawet odwoływać się do żadnych tabel
Inny przykład
Poniższy przykład definiuje widok, który wybiera dwie kolumny z innej tabeli, a także wyrażenie obliczone na podstawie tych kolumn:
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 |
+------+-------+-------+
Ograniczenia
- Przed MySQL 5.7.7 instrukcja SELECT nie mogła zawierać podzapytania w klauzuli FROM.
- Instrukcja SELECT nie może odnosić się do zmiennych systemowych lub zmiennych zdefiniowanych przez użytkownika.
- W przechowywanym programie instrukcja SELECT nie może odnosić się do parametrów programu ani zmiennych lokalnych.
- Instrukcja SELECT nie może odnosić się do przygotowanych parametrów instrukcji.
- Każda tabela lub widok, o których mowa w definicji, muszą istnieć. Po utworzeniu widoku można upuścić tabelę lub wyświetlić ją
definicja odnosi się do. W takim przypadku użycie widoku powoduje błąd. Aby sprawdzić definicję widoku pod kątem tego rodzaju problemów, użyj instrukcji CHECK TABLE. - Definicja nie może odnosić się do tabeli TEMPORARY i nie można
utwórz widok TYMCZASOWY. - Nie można powiązać wyzwalacza z widokiem.
- Aliasy dla nazw kolumn w instrukcji SELECT są sprawdzane pod kątem maksymalnej długości kolumny wynoszącej 64 znaki (a nie maksymalnego aliasu
długość 256 znaków). -
VIEW
może, ale nie musi, optymalizować tak samo jak równoważnySELECT
. Jest mało prawdopodobne, aby lepiej zoptymalizować.
Widok z dwóch tabel
Widok jest najbardziej przydatny, gdy można go użyć do pobrania danych z więcej niż jednej tabeli.
CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a
LEFT OUTER JOIN other_table b
ON a.id = b.id
W mysql widoki nie są materializowane. Jeśli teraz wykonasz proste zapytanie SELECT * FROM myview
, mysql faktycznie wykona LEFT JOIN za sceną.
Raz utworzony widok można połączyć z innymi widokami lub tabelami
Aktualizowanie tabeli za pośrednictwem WIDOKU
VIEW
działa bardzo podobnie do stołu. Chociaż możesz UPDATE
tabelę, możesz, ale nie musisz, zaktualizować widok tej tabeli. Ogólnie rzecz biorąc, jeśli SELECT
w widoku jest na tyle skomplikowany, że wymaga tabeli tymczasowej, wówczas UPDATE
nie jest dozwolone.
Rzeczy takie jak GROUP BY
, UNION
, HAVING
, DISTINCT
i niektóre podkwerendy uniemożliwiają aktualizację widoku. Szczegóły w instrukcji obsługi .
OPUSZCZANIE WIDOKU
- Utwórz i upuść widok w bieżącej bazie danych.
CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;
- Utwórz i upuść widok odwołujący się do tabeli w innej bazie danych.
CREATE VIEW table_from_other_db AS SELECT x FROM db1.foo WHERE x IS NOT NULL;
DROP VIEW table_from_other_db;