Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Widoki MySQL

Tutaj wyjaśniam, czym są „widoki” MySQL i jak ich używać.

MySQL daje nam możliwość tworzenia widoków . widok jest zdefiniowane jako przechowywane zapytanie, które po wywołaniu tworzy zestaw wyników. Niektórzy nazywają widoki „wirtualnymi stołami”.

Czyste jak błoto? Spróbujmy jeszcze raz.

Co to jest widok?

Widok to zapytanie, które zapisujesz w bazie danych. Możesz go później uruchomić, po prostu wywołując ten widok (zamiast wypisywać zapytanie ponownie).

Widok może składać się ze złożonego zapytania, ale będzie przedstawiał wyniki tak, jakby był tabelą. W związku z tym można wysyłać zapytania do widoku tak, jakby był to tabela.

Na przykład możesz mieć złożone zapytanie, które wybiera dane z trzech różnych tabel. Możesz albo wpisać to złożone zapytanie za każdym razem, gdy chcesz je uruchomić, albo zapisać je jako widok. Po zapisaniu jako widok możesz uruchomić prosty SELECT instrukcja zwracająca wyniki złożonego zapytania. Ale oczywiście możesz również napisać złożone zapytanie względem widoku, jeśli zajdzie taka potrzeba.

Utwórz widok

Tworzenie widoków jest bardzo proste. Po prostu poprzedzasz zapytanie jednym wierszem kodu i uruchamiasz je. Widok zostanie natychmiast utworzony w Twojej bazie danych.

Składnia

Aby utworzyć widok, wpisz następującą instrukcję, a następnie zapytanie:

CREATE VIEW view_name AS

Zastąp nazwa_widoku o dowolnej nazwie, której chcesz użyć dla widoku.

Przykład

Jeśli uruchomimy następujący kod w FruitShop baza danych:

CREATE VIEW vFruitInventory AS
SELECT 
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Widzimy teraz widok o nazwie vFruitInventory wymienione w sekcji Widoki (może być konieczne kliknięcie przycisku Odśwież przycisk SCHEMATY najpierw menu):

Dobrym pomysłem jest wymyślenie konwencji nazewnictwa dla widoków (jak w przypadku każdego innego obiektu bazy danych) i trzymanie się jej. Wielu programistów poprzedza nazwy widoków przedrostkiem v , vw , v_ lub vw_ aby ułatwić odróżnienie widoków od tabel w ich zapytaniach. Jednak inni programiści nie zgadzają się z tą konwencją i wolą, aby ich nazwy tabel i widoków były wymienne.

Zapytanie o widok

Teraz możemy wysłać zapytanie do widoku tak samo, jak zapytanie do tabeli:

SELECT * FROM vFruitInventory;

Wynik:

Oczywiście możemy też użyć bardziej szczegółowego zapytania. Na przykład ten, który wybiera tylko te rekordy, w których inwentarz jest większy lub mniejszy niż 10:

SELECT FruitName 
FROM vFruitInventory
WHERE Inventory <= 10;

Ale nie możemy Kolumny zapytań, do których nie odwołuje się widok (nawet jeśli znajdują się w tabelach źródłowych, do których wysyła zapytania).

Na przykład możemy zapytać o Owoce tabela w ten sposób:

SELECT * 
FROM Fruit
WHERE FruitId = 1;

Ale nie możemy przeszukiwać powyższego vFruitInventory zobacz w ten sposób:

SELECT * 
FROM vFruitInventory
WHERE FruitId = 1;

Dzieje się tak, ponieważ widok nie zwraca FruitId kolumna. Określiliśmy dokładne kolumny w widoku i tylko one są zwracane. Jak wspomniano, zestaw wyników widoku jest podobny do tabeli, a niektórzy lubią nazywać go „tablicą wirtualną”. Jeśli „tabela” nie zawiera tych kolumn, nie możesz wysłać do nich zapytania.

Zamiast być ograniczeniem, jest to w rzeczywistości funkcja wyświetleń. Ta funkcja oznacza, że ​​możemy przyznać użytkownikom dostęp do niektórych kolumny tabeli, ale nie inne (poprzez widok). Innymi słowy, możemy przyznać użytkownikowi dostęp do widoku bez przyznawania temu użytkownikowi dostępu do tabel bazowych, do których uzyskuje dostęp widok. Niektóre tabele mogą przechowywać poufne informacje, do których użytkownik nie ma dostępu. Ale te same tabele mogą również przechowywać niewrażliwe informacje, których potrzebują mieć dostęp. Co robić? Stwórz widok! A ten widok może wybrać tylko niewrażliwe informacje z tych tabel.

Modyfikowanie widoku

Oto dwie różne metody modyfikacji widoku.

Opcja 1:Użyj ALTER VIEW Oświadczenie

Możesz modyfikować widok, używając ALTER VIEW oświadczenie. Tak:

ALTER VIEW view_name AS

Zastąp nazwa_widoku z nazwą widoku, który chcesz zmienić.

Przykład

Dodajmy Fruit.FruitId pole do widoku:

ALTER VIEW vFruitInventory AS
SELECT 
	Fruit.FruitId,
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Teraz, gdy próbujemy zwrócić FruitId pole w naszych zapytaniach otrzymamy wyniki.

Pamiętaj jednak, że nie możemy próbować uzyskać dostępu do tego pola jako Fruit.FruitId . Możemy uzyskać do niego dostęp tylko jako FruitId . I tak powinno być. W końcu widok jest „wirtualną tabelą” i nie musimy znać struktury tabel, o które pyta.

Opcja 2:Użyj CREATE OR REPLACE

Pamiętaj, że widok musi istnieć przed uruchomieniem ALTER VIEW oświadczenie. Jeśli nie istnieje, otrzymasz błąd. Możesz uniknąć tego problemu, używając CREATE OR REPLACE oświadczenie. Spowoduje to utworzenie widoku, jeśli nie istnieje, lub zastąpienie go, jeśli tak.

Mogliśmy więc stworzyć powyższy widok w ten sposób:

CREATE OR REPLACE VIEW vFruitInventory AS
SELECT 
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

A potem możemy go zaktualizować, używając tego samego CREATE OR REPLACE oświadczenie, ale tylko modyfikując definicję. Na przykład dodanie w Fruit.FruitId pole:

CREATE OR REPLACE VIEW vFruitInventory AS
SELECT 
	Fruit.FruitId,
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Porzucanie widoku

Upuszczasz widok za pomocą DROP VIEW oświadczenie. Tak:

DROP VIEW vFruitInventory

Powyższe oświadczenie usunie widok o nazwie vFruitInventory .

Porzucanie wielu widoków

Możesz upuścić wiele widoków za pomocą tego samego DROP VIEW oświadczenie. Po prostu oddziel każdą nazwę widoku przecinkiem. Tak:

DROP VIEW view_1, view_2 ...

Karta IF EXISTS Klauzula

Możesz także użyć IF EXISTS klauzula zapobiegająca wystąpieniu błędu, jeśli widok nie istnieje:

DROP VIEW IF EXISTS view_1, view_2 ...

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php/mysql z wieloma zapytaniami

  2. Jak mogę wyliczyć możliwe wartości w bazie danych MySQL?

  3. Wybieranie losowych wierszy za pomocą MySQL

  4. Jak mogę odzyskać moją nazwę użytkownika i hasło MySQL?

  5. Czy mysql_real_escape_string() W PEŁNI chroni przed wstrzyknięciem SQL?