widok w MySQL to nazwane zapytanie, które może zostać wywołane w celu wyświetlenia danych przechowywanych w innych tabelach. Innymi słowy, widoki są wirtualnymi tabelami zdefiniowanymi przez użytkownika. Widoki mogą być używane do:
- Zwiększ bezpieczeństwo bazy danych. Jeśli Twoja baza danych zawiera poufne informacje, które wymagają zabezpieczenia, użycie widoku pomoże Ci wyizolować dane. Widok można utworzyć ze wstępnie zdefiniowanym zestawem wyników, a użytkownikom można przyznać dostęp tylko do tego widoku, a nie do tabeli zawierającej poufne informacje.
- Przenieś złożoną logikę biznesową na serwer bazy danych. Zamiast kodować często używaną logikę oprogramowania w różnych klientach, programista może przenieść logikę na poziom bazy danych za pomocą widoku. Na przykład można utworzyć widok, aby wyświetlić klasyfikacje klientów w zależności od ich całkowitej sprzedaży.
- Ogranicz rozpraszanie danych. Widok może łączyć wyniki z różnych tabel i wyświetlać tylko odpowiednie kolumny po wywołaniu.
Z tego przewodnika dowiesz się:
- Jak skonstruowana jest składnia widoku MySQL.
- Jak utworzyć widok MySQL.
- Jak wywołać widok MySQL.
- Jak usunąć widok w MySQL.
Zanim zaczniesz
Aby postępować zgodnie z tym przewodnikiem, upewnij się, że masz następujące elementy:
-
Linode, na którym uruchamiasz oprogramowanie MySQL. Możesz postępować zgodnie z przewodnikiem Wprowadzenie do Linode, aby udostępnić Linode.
-
Oprogramowanie serwera MySQL (lub MariaDB) zainstalowane na twoim Linode. Zapoznaj się z sekcją MySQL, która zawiera przewodniki opisujące, jak zainstalować MySQL w kilku dystrybucjach Linuksa.
Przygotowywanie bazy danych
Zanim utworzysz widoki MySQL, utwórz przykładową bazę danych, zdefiniuj kilka tabel i wypełnij je danymi:
-
SSH do twojego Linode. Następnie wprowadź to polecenie, aby zalogować się do MySQL jako użytkownik root:
mysql -u root -p
Po wyświetleniu monitu wprowadź hasło roota serwera MySQL i naciśnij Enter aby kontynuować.
Uwaga
Jeśli twoje hasło nie zostanie zaakceptowane, być może będziesz musiał uruchomić poprzednie polecenie z
sudo
:sudo mysql -u root -p
-
Jeśli Twoje hasło zostało zaakceptowane, powinieneś zobaczyć monit MySQL:
mysql >
Uwaga
Jeśli korzystasz z MariaDB, zamiast tego możesz zobaczyć monit podobny do następującego:
MariaDB [(none)]>
-
Następnie uruchom to polecenie SQL, aby utworzyć przykładową bazę danych o nazwie
sample_database
:CREATE DATABASE sample_database;
Powinieneś zobaczyć ten wynik, który potwierdza, że baza danych została pomyślnie utworzona:
Query OK, 1 row affected (0.02 sec)
-
Wybierz
sample_database
baza danych:USE sample_database;
Powinieneś zobaczyć to wyjście:
Database changed
-
Uruchom to polecenie, aby utworzyć
customers
tabela:CREATE TABLE customers ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(50) ) ENGINE = InnoDB;
Powinieneś zobaczyć to wyjście:
Query OK, 0 rows affected (0.07 sec)
-
Następnie wypełnij
customers
tabela z trzema rekordami. Uruchom poniższyINSERT
polecenia jeden po drugim:INSERT INTO customers (customer_name) VALUES ('Leslie'); INSERT INTO customers (customer_name) VALUES ('Andy'); INSERT INTO customers (customer_name) VALUES ('Ben');
Poniższe dane wyjściowe są wyświetlane po wstawieniu każdego rekordu:
Query OK, 1 row affected (0.08 sec) ...
-
Upewnij się, że przykładowe rekordy zostały wstawione do bazy danych, uruchamiając ten
SELECT
polecenie:SELECT * FROM customers;
Pojawi się ten wynik, który potwierdza, że dane zostały pomyślnie wstawione w poprzednim kroku:
+-------------+---------------+ | customer_id | customer_name | +-------------+---------------+ | 1 | Leslie | | 2 | Andy | | 3 | Ben | +-------------+---------------+ 3 rows in set (0.01 sec)
-
Następnie utwórz
sales
stół. Uruchom to polecenie:CREATE TABLE sales ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, monthly_sales DECIMAL(17,2) ) ENGINE = InnoDB;
Pojawia się to wyjście:
Query OK, 0 rows affected (0.07 sec)
-
Następnie dodaj trochę danych do
sales
stół. Uruchom te polecenia jeden po drugim:INSERT INTO sales (customer_id, monthly_sales) VALUES ('1','500.27'); INSERT INTO sales (customer_id, monthly_sales) VALUES ('2','7600.32'); INSERT INTO sales (customer_id, monthly_sales) VALUES ('3', '25879.63');
Po wstawieniu każdego rekordu sprzedaży pojawi się następujący wynik:
Query OK, 1 row affected (0.01 sec) ...
-
Następnie uruchom
SELECT
zapytanie, aby sprawdzić, czy dane sprzedaży zostały wstawione do tabeli:SELECT * FROM sales;
Pojawi się ten wynik, który potwierdza, że dane sprzedaży zostały pomyślnie wstawione w poprzednim kroku:
+-------------+---------------+ | customer_id | monthly_sales | +-------------+---------------+ | 1 | 500.27 | | 2 | 7600.32 | | 3 | 25879.63 | +-------------+---------------+ 3 rows in set (0.00 sec)
Zdefiniowałeś bazę danych i tabele do pracy. Następna sekcja opisuje składnię widoku MySQL.
Składnia widoku MySQL
To jest uproszczona wersja składni widoku MySQL:
CREATE
VIEW view_name
AS select_statement
-
view_name
:Tutaj należy zdefiniować nazwę widoku MySQL. Wskazane jest użycie nazwy opisowej, aby móc później zapamiętać funkcję widoku. -
select_statement
:To jest zapytanie SQL połączone ze zdefiniowanym widokiem. Po wywołaniu widoku MySQL uruchamia to zapytanie, aby zwrócić zestaw rekordów.
Tworzenie widoku MySQL
Ta sekcja przedstawia przykładowy widok MySQL. Ten widok służy do klasyfikowania klientów z Twojej przykładowej bazy danych w zależności od ich liczby miesięcznej sprzedaży.
Upewnij się, że jesteś zalogowany na swoim serwerze MySQL. Następnie uruchom poniższe polecenie, aby utworzyć customers_membership
widok:
CREATE
VIEW customers_membership
AS SELECT sales.customer_id,
customer_name,
(IF(sales.monthly_sales >= 5000, 'PREMIUM', 'BASIC')) as membership
FROM sales
LEFT JOIN customers
ON sales.customer_id = customers.customer_id;
Jeśli widok zostanie pomyślnie utworzony, powinieneś zobaczyć dane wyjściowe pokazane poniżej:
Query OK, 0 rows affected (0.01 sec)
Powyższe polecenie MySQL tworzy widok o nazwie customers_membership
która dołącza do customers
i sales
tabela z PRIMARY KEY
customer_id
. Logiczne IF(expression, value_if_true, value_if_false)
Logika wyciągu służy do określenia członkostwa klienta na podstawie jego miesięcznej sprzedaży:
-
Jeśli sprzedaż klienta jest równa lub wyższa niż 5000, widok klasyfikuje klienta jako
PREMIUM
członek. -
W przeciwnym razie (jeśli sprzedaż spadnie poniżej
5,000
), klient jest klasyfikowany jakoBASIC
członek.
customers_membership
widok jest teraz zapisany w bazie danych. Następna sekcja pokazuje, jak wywołać widok MySQL i wyświetlić zestaw rekordów bez bezpośredniego odpytywania tabel bazowych.
Wywoływanie widoku MySQL
Ta sekcja pokazuje, jak wywołać widok MySQL, który utworzyłeś powyżej i potwierdzić, że działa zgodnie z oczekiwaniami. Po utworzeniu widok jest widoczny jako obiekt bazy danych i można go wywołać za pomocą SELECT
oświadczenie.
-
Aby wywołać
customers_membership
zobacz, uruchom:SELECT * FROM customers_membership;
Jeśli widok działa zgodnie z oczekiwaniami, powinieneś teraz zobaczyć listę klientów z ich wygenerowanym
membership
wartości na podstawie ich sprzedaży. OdLeslie
sprzedaż była poniżej 5000 (500,27), widok wyświetla członkostwo klienta jakoBASIC
.Andy
iBen
sprzedaż wyniosła odpowiednio 7600,32 i 25879,63, co czyni jePREMIUM
członkowie:+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | +-------------+---------------+------------+ 3 rows in set (0.00 sec)
-
Po zaktualizowaniu danych tabeli podstawowej i ponownym wywołaniu widoku MySQL, powinieneś zobaczyć najnowsze informacje. Widoki pobierają informacje ze swoich tabel podstawowych i nie przechowują danych. Aby zademonstrować, w jaki sposób widok pobiera zaktualizowane informacje z tabel podstawowych, dodaj innego klienta o nazwie
Rajie
docustomers
tabela:INSERT INTO customers (customer_name) VALUES ('Rajie');
Pojawia się to wyjście:
Query OK, 1 row affected (0.01 sec)
-
Następnie dodaj miesięczne informacje o sprzedaży klienta do tabeli sprzedaży:
INSERT INTO sales (customer_id, monthly_sales) VALUES ('4', '147.41');
Pojawia się to wyjście:
Query OK, 1 row affected (0.01 sec)
-
Następnie wywołaj
customers_membership
zobacz ponownie:SELECT * FROM customers_membership;
Pojawia się poniższy wynik, który potwierdza, że widok jest w stanie wychwycić zmiany i pobrać informacje o nowych klientach zgodnie z oczekiwaniami:
+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | | 4 | Rajie | BASIC | +-------------+---------------+------------+ 4 rows in set (0.00 sec)
Jak widać w powyższym zestawie rekordów widoku, masz teraz nowego klienta o nazwie
Rajie
zBASIC
członkostwo.
Porzucanie widoku MySQL
Podobnie jak inne obiekty bazy danych, możesz usuwać widoki, jeśli już ich nie potrzebujesz. To jest podstawowa składnia usuwania widoku MySQL:
DROP VIEW IF EXISTS view_name;
-
Przed upuszczeniem widoku MySQL, najpierw zidentyfikuj jego nazwę, uruchamiając poniższe polecenie:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Pojawi się lista wszystkich widoków w aktualnie wybranej bazie danych:
+---------------------------+------------+ | Tables_in_sample_database | Table_type | +---------------------------+------------+ | customers_membership | VIEW | +---------------------------+------------+ 1 row in set (0.01 sec)
-
W tym przypadku nazwa widoku, który chcesz usunąć, to
customers_membership
. Aby go usunąć, uruchom:DROP VIEW IF EXISTS customers_membership;
Upewnij się, że poniższe dane wyjściowe są wyświetlane po usunięciu widoku z bazy danych:
Query OK, 0 rows affected (0.01 sec)
Uwaga Pamiętaj, że jeśli spróbujesz usunąć widok MySQL, który nie istnieje bez użycia
IF EXISTS
słowo kluczowe, MySQL zgłasza błąd. -
Po ponownym uruchomieniu polecenia z kroku 1 nie powinno być żadnych wyników:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Empty set (0.000 sec)
Więcej informacji
Dodatkowe informacje na ten temat można znaleźć w poniższych zasobach. Chociaż są one dostarczane w nadziei, że będą przydatne, należy pamiętać, że nie możemy ręczyć za dokładność ani aktualność materiałów hostowanych zewnętrznie.
- MySQL — korzystanie z widoków