sql >> Database >  >> RDS >> Mysql

MySQL-weergaven

Hier leg ik uit wat MySQL "views" zijn en hoe je ze kunt gebruiken.

MySQL biedt ons de mogelijkheid om weergaven te maken . Een weergave wordt gedefinieerd als een opgeslagen query die, wanneer aangeroepen, een resultatenset produceert. Sommige mensen noemen weergaven "virtuele tabellen".

Helder als modder? Laten we het opnieuw proberen.

Wat is een weergave?

Een view is een query die u opslaat in de database. U kunt het later eenvoudig uitvoeren door die weergave aan te roepen (in plaats van de vraag opnieuw uit te schrijven).

De weergave kan uit een complexe query bestaan, maar de resultaten worden weergegeven alsof het een tabel is. Daarom kunt u de weergave opvragen alsof het een tabel is.

U kunt bijvoorbeeld een complexe query hebben die gegevens uit drie verschillende tabellen selecteert. U kunt deze complexe query elke keer typen als u deze moet uitvoeren, of u kunt de query opslaan als een weergave. Nadat het is opgeslagen als een weergave, kunt u een eenvoudige SELECT . uitvoeren statement om de resultaten van de complexe query te retourneren. Maar u kunt natuurlijk ook een complexe query schrijven tegen de weergave als dat nodig is.

Een weergave maken

Het maken van views is heel eenvoudig. U laat uw query gewoon voorafgaan met één regel code en voert deze uit. De weergave wordt onmiddellijk in uw database aangemaakt.

Syntaxis

Typ de volgende instructie, gevolgd door de query om een ​​weergave te maken:

CREATE VIEW view_name AS

Vervang view_name met welke naam je ook wilt gebruiken voor het uitzicht.

Voorbeeld

Als we de volgende code uitvoeren tegen de FruitShop databank:

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

We zien nu een weergave genaamd vFruitInventory vermeld onder Weergaven (mogelijk moet u op Vernieuwen . klikken knop voor de SCHEMA'S menu eerst):

Het is een goed idee om een ​​naamgevingsconventie voor uw views te bedenken (zoals bij elk ander databaseobject) en u eraan te houden. Veel ontwikkelaars laten hun weergavenamen voorafgaan met v , vw , v_ of vw_ zodat het gemakkelijker wordt om weergaven van tabellen te onderscheiden in hun query's. Andere ontwikkelaars zijn het echter niet eens met deze conventie en geven er de voorkeur aan dat hun tabel- en weergavenamen onderling uitwisselbaar zijn.

Een weergave opvragen

Nu kunnen we de weergave opvragen, net zoals we een tabel zouden opvragen:

SELECT * FROM vFruitInventory;

Resultaat:

Natuurlijk kunnen we ook een specifiekere zoekopdracht gebruiken. Bijvoorbeeld deze die alleen die records selecteert waarvan de voorraad groter of kleiner is dan 10:

SELECT FruitName 
FROM vFruitInventory
WHERE Inventory <= 10;

Maar we kunnen niet querykolommen waarnaar niet wordt verwezen in de weergave (zelfs als ze zich in de onderliggende tabellen bevinden waarin de weergave query's uitvoert).

We kunnen bijvoorbeeld de Fruit . opvragen tabel als volgt:

SELECT * 
FROM Fruit
WHERE FruitId = 1;

Maar we kunnen de bovenstaande vFruitInventory niet opvragen bekijk het als volgt:

SELECT * 
FROM vFruitInventory
WHERE FruitId = 1;

Dit komt omdat de weergave de FruitId . niet retourneert kolom. We hebben de exacte kolommen in de weergave gespecificeerd en dat zijn de enigen die worden geretourneerd. Zoals vermeld, is de resultatenset van de weergave net een tabel en sommigen noemen het graag een "virtuele tabel". Als de "tabel" die kolommen niet bevat, kunt u ze niet opvragen.

In plaats van een beperking te zijn, is dit eigenlijk een functie van uitzichten. Deze functie houdt in dat we gebruikers toegang kunnen verlenen tot sommige kolommen van een tabel, maar niet van andere (via de weergave). Met andere woorden, we kunnen een gebruiker toegang verlenen tot een weergave zonder die gebruiker toegang te verlenen tot de onderliggende tabellen waartoe de weergave toegang heeft. Sommige tabellen kunnen gevoelige informatie bevatten waartoe de gebruiker geen toegang heeft. Maar dezelfde tabellen kunnen ook niet-gevoelige informatie bevatten die ze nodig hebben toegang te krijgen. Wat moeten we doen? Creëer een uitzicht! En die weergave kan alleen de niet-gevoelige informatie uit die tabellen selecteren.

Een weergave wijzigen

Hier zijn twee verschillende methoden om uw weergave te wijzigen.

Optie 1:Gebruik de ALTER VIEW Verklaring

U kunt een weergave wijzigen door gebruik te maken van de ALTER VIEW uitspraak. Zoals dit:

ALTER VIEW view_name AS

Vervang view_name met de naam van de weergave die u wilt wijzigen.

Voorbeeld

Laten we de Fruit.FruitId . toevoegen veld naar de weergave:

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

Wanneer we nu proberen de FruitId . te retourneren veld in onze vragen zullen we resultaten krijgen.

Houd er echter rekening mee dat we niet kunnen proberen toegang te krijgen tot dit veld als Fruit.FruitId . We hebben er alleen toegang toe als FruitId . En zo zou het moeten zijn. De view is tenslotte een "virtuele tabel" en we hoeven de structuur van de tabellen die hij doorzoekt niet te kennen.

Optie 2:Gebruik CREATE OR REPLACE

Merk op dat de weergave moet bestaan ​​voordat u de ALTER VIEW . uitvoert uitspraak. Als het niet bestaat, krijg je een foutmelding. U kunt dit probleem voorkomen door een CREATE OR REPLACE . te gebruiken uitspraak. Hiermee wordt de weergave gemaakt als deze niet bestaat, of wordt deze vervangen als deze wel bestaat.

Dus we hadden de bovenstaande weergave als volgt kunnen maken:

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

En dan zouden we het kunnen updaten met dezelfde CREATE OR REPLACE verklaring, maar alleen de definitie te wijzigen. Bijvoorbeeld het toevoegen van de Fruit.FruitId veld:

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;

Een weergave laten vallen

U kunt een weergave neerzetten met behulp van de DROP VIEW uitspraak. Zoals dit:

DROP VIEW vFruitInventory

De bovenstaande verklaring verwijdert de weergave genaamd vFruitInventory .

Meerdere weergaven laten vallen

U kunt meerdere weergaven verwijderen met dezelfde DROP VIEW uitspraak. Scheid elke weergavenaam met een komma. Zoals dit:

DROP VIEW view_1, view_2 ...

De IF EXISTS Clausule

U kunt ook de IF EXISTS . gebruiken clausule om te voorkomen dat er een fout optreedt als een weergave niet bestaat:

DROP VIEW IF EXISTS view_1, view_2 ...

  1. Voorbeeld JDBC-verklaring - Batch invoegen, bijwerken, verwijderen

  2. verbinding maken met de postgres-server op google compute engine

  3. Waarom vertraagt ​​de hogere LIMIT-offset van MYSQL de query?

  4. MySQL op Azure Performance Benchmark – ScaleGrid vs. Azure Database