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 . Instrukcja SELECT 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żny SELECT . 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;


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow