MySQL Widoki: jak utworzyć widok z tabel z przykładami

W czym są widoki MySQL?

POGLĄDY to wirtualne tabele, które nie przechowują żadnych własnych danych, ale wyświetlają dane przechowywane w innych tabelach. Innymi słowy, WIDOKI to nic innego jak zapytania SQL. Widok może zawierać wszystkie lub kilka wierszy tabeli. A MySQL widok może pokazywać dane z jednej tabeli lub wielu tabel.

MySQL Składnia widoków

Przyjrzyjmy się teraz podstawowej składni używanej do tworzenia widoku w MySQL.

CREATE VIEW `view_name` AS SELECT statement;

WHERE

  • „UTWÓRZ WIDOK „nazwa_widoku”” mówi MySQL serwer, aby utworzyć obiekt widoku w bazie danych o nazwie `nazwa_widoku`
  • „Oświadczenie AS SELECT” to instrukcje SQL, które mają być spakowane w pliku MySQL Wyświetlenia. Może to być instrukcja SELECT, która może zawierać dane z jednej tabeli lub wielu tabel.

Jak tworzyć widoki w MySQL

Poniżej przedstawiono krok po kroku proces tworzenia widoku w MySQL:

Krok 1) Utwórz nasz pierwszy widok za pomocą „myflixdb”

Stwórzmy teraz nasz pierwszy widok za pomocą „myflixdb”. Stworzymy prosty widok, który ogranicza kolumny widoczne w tabeli członków.

Załóżmy, że wymagania dotyczące autoryzacji stanowią, że dział księgowości może zobaczyć tylko numer członka, imię i nazwisko oraz płeć z tabeli członków. Aby to osiągnąć, możesz utworzyć WIDOK –

CREATE VIEW `accounts_v_members` AS SELECT `membership_number`,`full_names`,`gender` FROM `members`;

Krok 2) Rozwijanie węzła widoków

Wykonanie powyższego skryptu w MySQL workbench z myflixdb i rozwinięcie węzła views w eksploratorze bazy danych daje nam następujące wyniki.

Utwórz widoki w MySQL

Uwaga: obiekt account_v_members jest teraz widoczny w obiektach widoków bazy danych.

Krok 3) Wykonaj instrukcję SELECT

Wykonajmy teraz a SELECT oświadczenie który wybiera wszystkie pola z widoku, jak pokazano poniżej MySQL utwórz przykład widoku.

SELECT * FROM `accounts_v_members`;

Krok 4) Wykonaj skrypt

Wykonanie powyższego skryptu w MySQL workbench i myflixdb dają nam następujące wyniki, pokazane poniżej.

membership_number full_names gender
1 Janet Jones Female
2 Janet Smith Jones Female
3 Robert Phil Male
4 Gloria Williams Female
5 Leonard Hofstadter Male
6 Sheldon Cooper Male
7 Rajesh Koothrappali Male
8 Leslie Winkle Male
9 Howard Wolowitz Male

Zwrócono tylko autoryzowane kolumny dla działu kont. Inne szczegóły znalezione w tabeli członków zostały ukryte.

Jeśli chcemy zobaczyć instrukcje SQL tworzące konkretny widok, możemy w tym celu skorzystać ze skryptu pokazanego poniżej.

SHOW CREATE VIEW `accounts_v_members`;

Wykonanie powyższego skryptu daje nazwę widoku i instrukcje SQL SELECT użyte do utworzenia widoku.

Dołącza i ogląda w MySQL

Przyjrzyjmy się teraz dość złożonemu przykładowi, który obejmuje wiele tabel i zastosowań łączy.

Spakujemy utworzony JOIN, który pobiera informacje z trzech (3) tabel, a mianowicie członków, filmów i wypożyczeń filmów. Poniżej znajduje się skrypt, który pomaga nam to osiągnąć.

CREATE VIEW `general_v_movie_rentals` AS SELECT mb.`membership_number`,mb.`full_names`,mo.`title`,mr.`transaction_date`,mr.`return_date` FROM `movierentals` AS mr INNER JOIN `members` AS mb ON mr.`membership_number` = mb.`membership_number` INNER JOIN `movies` AS mo ON mr.`movie_id` = mo.`movie_id`;

Wykonanie powyższych skryptów tworzy widok o nazwie general_v_movie_rentals w naszym myflixdb

Wybierzmy teraz wszystkie pola z tabeli o nazwie general_v_movie_rentals.

SELECT * FROM `general_v_movie_rentals`;

Wykonanie powyższego skryptu w MySQL Workbench w stosunku do myflixdb daje nam następujące wyniki pokazane poniżej.

membership_number full_names title transaction_date return_date
1 Janet Jones Pirates of the Caribean 4 20-06-2012 28-06-2012
1 Janet Jones Forgetting Sarah Marshal 22-06-2012 25-06-2012
3 Robert Phil Forgetting Sarah Marshal 22-06-2012 25-06-2012
2 Janet Smith Jones Forgetting Sarah Marshal 21-06-2012 24-06-2012
3 Robert Phil X-Men 23-06-2012 28-06-2012

Zauważ, że nie musieliśmy pisać złożonego zapytania JOIN, aby uzyskać informacje o członkach, filmach i szczegółach wypożyczania filmów. Po prostu użyliśmy widoku w zwykłym poleceniu SELECT, jak każdej innej zwykłej tabeli. Widok można wywołać z dowolnego miejsca w systemie aplikacji działającym na myflixdb.

Upuszczanie wyświetleń MySQL

Polecenie DROP może zostać użyte do usunięcia widoku z pliku baza danych to nie jest już wymagane. Podstawowa składnia upuszczania widoku jest następująca.

DROP VIEW ` general_v_movie_rentals `;

Dlaczego warto korzystać z widoków?

Widoki możesz chcieć używać głównie z następujących 3 powodów

  • Ostatecznie użyjesz swojego SQL wiedzy, do tworzenia aplikacji, które będą wykorzystywać bazę danych do potrzeb danych. Zaleca się używanie w aplikacji WIDOKÓW oryginalnej struktury tabeli, zamiast używania samych tabel. Gwarantuje to, że podczas refaktoryzacji bazy danych starszy kod zobaczy oryginalny schemat w widoku bez psucia aplikacji.
  • VIEWS zwiększają możliwość ponownego użycia. Nie będziesz musiał tworzyć złożonych zapytań obejmujących łączenia wielokrotnie. Cała złożoność jest konwertowana do pojedynczego wiersza zapytania za pomocą VIEWS. Taki skondensowany kod będzie łatwiejszy do zintegrowania w Twojej aplikacji. Wyeliminuje to ryzyko literówek, a Twój kod będzie bardziej czytelny.
  • VIEWS pomagają w zabezpieczaniu danych. Możesz używać widoków, aby pokazywać użytkownikom tylko autoryzowane informacje i ukrywać poufne dane, takie jak numery kart kredytowych.

Podsumowanie

  • Widoki to wirtualne tabele; nie zawierają zwracanych danych. Dane są przechowywane w tabelach, do których odwołuje się instrukcja SELECT.
  • Widoki poprawiają bezpieczeństwo bazy danych, pokazując tylko zamierzone dane autoryzowanym użytkownikom. Ukrywają poufne dane.
  • Widoki ułatwiają życie, ponieważ nie trzeba ciągle pisać złożonych zapytań.
  • Można użyć INSERT, UPDATE i DELETE w VIEW. Te operacje zmienią tabele bazowe VIEW. Jedynym zastrzeżeniem jest to, że VIEW powinien zawierać wszystkie kolumny NOT NULL tabel, do których się odwołuje. W idealnym przypadku nie należy używać VIEWS do aktualizacji.