Zde vysvětluji, co jsou "pohledy" MySQL a jak je používat.
MySQL nám poskytuje možnost vytvářet pohledy . pohled je definován jako uložený dotaz, který po vyvolání vytvoří sadu výsledků. Někteří lidé označují pohledy za „virtuální tabulky“.
Jasný jako bláto? Zkusme to znovu.
Co je zobrazení?
Pohled je dotaz, který uložíte do databáze. Později jej můžete spustit jednoduše voláním tohoto zobrazení (namísto opětovného vypisování dotazu).
Pohled může sestávat ze složitého dotazu, ale výsledky zobrazí, jako by to byla tabulka. Proto můžete dotazovat zobrazení, jako by šlo o tabulku.
Můžete mít například složitý dotaz, který vybírá data ze tří různých tabulek. Tento složitý dotaz můžete buď napsat pokaždé, když jej potřebujete spustit, nebo můžete dotaz uložit jako pohled. Jakmile je uložen jako pohled, můžete spustit jednoduchý SELECT
příkaz vrátit výsledky složitého dotazu. Ale samozřejmě můžete také napsat složitý dotaz proti pohledu, pokud je to nutné.
Vytvořit zobrazení
Vytváření pohledů je velmi jednoduché. Stačí zadat před dotaz jeden řádek kódu a spustit jej. Pohled bude okamžitě vytvořen ve vaší databázi.
Syntaxe
Chcete-li vytvořit zobrazení, zadejte následující příkaz a za ním dotaz:
CREATE VIEW view_name AS
Nahraďte view_name s jakýmkoli názvem, který chcete použít pro zobrazení.
Příklad
Pokud spustíme následující kód proti FruitShop databáze:
CREATE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Nyní vidíme pohled nazvaný vFruitInventory uvedeny v části Zobrazení (možná budete muset kliknout na Obnovit tlačítko pro SCHÉMA nejprve menu):
Je dobré si pro své pohledy vymyslet konvenci pojmenování (jako u každého jiného databázového objektu) a držet se jí. Mnoho vývojářů uvádí před názvy zobrazení v
, vw
, v_
nebo vw_
tak, aby bylo snazší rozlišit pohledy od tabulek v jejich dotazech. Jiní vývojáři však s touto konvencí nesouhlasí a dávají přednost tomu, aby jejich názvy tabulek a pohledů byly zaměnitelné.
Dotaz na zobrazení
Nyní můžeme dotazovat pohled stejně, jako bychom dotazovali tabulku:
SELECT * FROM vFruitInventory;
Výsledek:
Samozřejmě můžeme použít i konkrétnější dotaz. Například tento, který vybírá pouze ty záznamy, kde je inventář větší nebo menší než 10:
SELECT FruitName FROM vFruitInventory WHERE Inventory <= 10;
Ale nemůžeme sloupce dotazu, na které se v zobrazení neodkazuje (i když jsou v podkladových tabulkách, které zobrazení dotazuje).
Můžeme se například zeptat na Ovoce tabulka takto:
SELECT * FROM Fruit WHERE FruitId = 1;
Nemůžeme se ale dotazovat na výše uvedený vFruitInventory zobrazit takto:
SELECT * FROM vFruitInventory WHERE FruitId = 1;
Důvodem je, že zobrazení nevrací FruitId sloupec. Zadali jsme přesné sloupce v pohledu a to jsou všechny, které jsou vráceny. Jak již bylo zmíněno, výsledná sada pohledu je jako tabulka a někteří ji rádi nazývají "virtuální tabulka". Pokud „tabulka“ tyto sloupce neobsahuje, nemůžete se na ně dotazovat.
Spíše než o omezení jde ve skutečnosti o funkci zhlédnutí. Tato funkce znamená, že můžeme uživatelům udělit přístup k některým sloupce tabulky, ale ne jiné (prostřednictvím zobrazení). Jinými slovy, můžeme uživateli udělit přístup k pohledu, aniž bychom mu udělili přístup k podkladovým tabulkám, ke kterým pohled přistupuje. Některé tabulky mohou ukládat citlivé informace, ke kterým uživatel nemá povolen přístup. Ale stejné tabulky mohou také ukládat necitlivé informace, které potřebují mít přístup. Co dělat? Vytvořte pohled! A tento pohled může vybrat pouze necitlivé informace z těchto tabulek.
Úprava zobrazení
Zde jsou dva různé způsoby úpravy zobrazení.
Možnost 1:Použijte ALTER VIEW
Prohlášení
Zobrazení můžete upravit pomocí ALTER VIEW
prohlášení. Takhle:
ALTER VIEW view_name AS
Nahraďte view_name s názvem pohledu, který chcete změnit.
Příklad
Přidejme Fruit.FruitId pole k zobrazení:
ALTER VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Nyní, když se pokusíme vrátit FruitId pole v našich dotazech získáme výsledky.
Upozorňujeme však, že se nemůžeme pokusit o přístup k tomuto poli jako Fruit.FruitId
. Můžeme k němu přistupovat pouze jako FruitId
. A tak to má být. Koneckonců, pohled je "virtuální tabulka" a nepotřebujeme znát strukturu tabulek, které se dotazuje.
Možnost 2:Použijte CREATE OR REPLACE
Pamatujte, že před spuštěním ALTER VIEW
musí zobrazení existovat prohlášení. Pokud neexistuje, zobrazí se chyba. Tomuto problému se můžete vyhnout pomocí CREATE OR REPLACE
prohlášení. Toto vytvoří pohled, pokud neexistuje, nebo jej nahradí, pokud existuje.
Výše uvedený pohled bychom tedy mohli vytvořit takto:
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
A pak bychom jej mohli aktualizovat pomocí stejného CREATE OR REPLACE
prohlášení, ale pouze úprava definice. Například přidáním 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;
Vypuštění zobrazení
Zobrazení můžete pustit pomocí DROP VIEW
prohlášení. Takhle:
DROP VIEW vFruitInventory
Výše uvedené prohlášení odstraní zobrazení s názvem vFruitInventory .
Vypuštění více zobrazení
Pomocí stejného DROP VIEW
můžete zrušit více pohledů prohlášení. Každý název pohledu oddělte čárkou. Takhle:
DROP VIEW view_1, view_2 ...
Položka IF EXISTS
Ustanovení
Můžete také použít IF EXISTS
klauzule, která zabrání výskytu chyby, pokud pohled neexistuje:
DROP VIEW IF EXISTS view_1, view_2 ...