Mysql
 sql >> Database >  >> RDS >> Mysql

Viste MySQL

Qui spiego cosa sono le "viste" MySQL e come usarle.

MySQL ci offre la possibilità di creare viste . Una vista è definita come una query archiviata che, quando viene richiamata, produce un set di risultati. Alcune persone si riferiscono alle viste come "tabelle virtuali".

Chiaro come il fango? Riproviamo.

Cos'è una vista?

Una vista è una query salvata nel database. Puoi quindi eseguirlo in un secondo momento semplicemente chiamando quella vista (piuttosto che scrivere di nuovo la query).

La vista potrebbe consistere in una query complessa ma presenterà i risultati come se fosse una tabella. Pertanto, puoi interrogare la vista come se fosse una tabella.

Ad esempio, potresti avere una query complessa che seleziona i dati da tre tabelle diverse. È possibile digitare questa query complessa ogni volta che è necessario eseguirla oppure salvare la query come vista. Una volta salvata come vista, puoi eseguire un semplice SELECT istruzione per restituire i risultati della query complessa. Ma ovviamente puoi anche scrivere una query complessa sulla vista, se necessario.

Crea una vista

La creazione di viste è molto semplice. Devi semplicemente far precedere la tua query con una riga di codice ed eseguirla. La vista verrà immediatamente creata nel tuo database.

Sintassi

Per creare una vista, digita la seguente istruzione, seguita dalla query:

CREATE VIEW view_name AS

Sostituisci view_name con il nome che desideri utilizzare per la vista.

Esempio

Se eseguiamo il codice seguente su FruitShop banca dati:

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

Ora vediamo una vista chiamata vFruitInventory elencati in Viste (potrebbe essere necessario fare clic su Aggiorna pulsante per gli SCHEMI prima il menu):

È una buona idea pensare a una convenzione di denominazione per le tue viste (come con qualsiasi altro oggetto di database) e attenersi ad essa. Molti sviluppatori antepongono ai nomi delle viste v , vw , v_ o vw_ in modo che sia più facile distinguere le viste dalle tabelle nelle loro query. Tuttavia, altri sviluppatori non sono d'accordo con questa convenzione e preferiscono che i loro nomi di tabelle e viste siano intercambiabili.

Interrogazione di una vista

Ora possiamo interrogare la vista proprio come interrogheremmo una tabella:

SELECT * FROM vFruitInventory;

Risultato:

Naturalmente, possiamo utilizzare anche una query più specifica. Ad esempio, questo che seleziona solo quei record in cui l'inventario è maggiore o minore di 10:

SELECT FruitName 
FROM vFruitInventory
WHERE Inventory <= 10;

Ma noi non possiamo colonne di query a cui non viene fatto riferimento nella vista (anche se si trovano nelle tabelle sottostanti che la vista interroga).

Ad esempio, possiamo interrogare Frutta tabella come questa:

SELECT * 
FROM Fruit
WHERE FruitId = 1;

Ma non possiamo interrogare il vFruitInventory sopra visualizza in questo modo:

SELECT * 
FROM vFruitInventory
WHERE FruitId = 1;

Questo perché la vista non restituisce FruitId colonna. Abbiamo specificato le colonne esatte nella vista e quelle sono tutto ciò che viene restituito. Come accennato, il set di risultati della vista è proprio come una tabella e ad alcuni piace chiamarlo "tabella virtuale". Se la "tabella" non include quelle colonne, non puoi interrogarle.

Piuttosto che essere una limitazione, questa è in realtà una funzione di vedute. Questa funzione significa che possiamo concedere agli utenti l'accesso ad alcuni colonne di una tabella ma non altre (tramite la vista). In altre parole, possiamo concedere a un utente l'accesso a una vista senza concedere a quell'utente l'accesso alle tabelle sottostanti a cui accede la vista. Alcune tabelle potrebbero archiviare informazioni riservate a cui l'utente non è autorizzato ad accedere. Ma le stesse tabelle potrebbero anche memorizzare informazioni non sensibili di cui hanno bisogno accedere. Cosa fare? Crea una vista! E quella vista può selezionare solo le informazioni non sensibili da quelle tabelle.

Modifica di una vista

Ecco due diversi metodi per modificare la visualizzazione.

Opzione 1:usa ALTER VIEW Dichiarazione

Puoi modificare una vista utilizzando ALTER VIEW dichiarazione. In questo modo:

ALTER VIEW view_name AS

Sostituisci view_name con il nome della vista che desideri modificare.

Esempio

Aggiungiamo il Fruit.FruitId campo alla vista:

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

Ora, quando proviamo a restituire il FruitId campo nelle nostre query otterremo risultati.

Ma tieni presente che non possiamo provare ad accedere a questo campo come Fruit.FruitId . Possiamo accedervi solo come FruitId . Ed è così che dovrebbe essere. Dopotutto, la vista è una "tabella virtuale" e non abbiamo bisogno di conoscere la struttura delle tabelle che interroga.

Opzione 2:usa CREATE OR REPLACE

Nota che la vista deve esistere prima di eseguire ALTER VIEW dichiarazione. Se non esiste, riceverai un errore. Puoi evitare questo problema utilizzando un CREATE OR REPLACE dichiarazione. Questo creerà la vista se non esiste, o la sostituirà se esiste.

Quindi avremmo potuto creare la vista sopra in questo modo:

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

E poi potremmo aggiornarlo usando lo stesso CREATE OR REPLACE istruzione, ma solo modificando la definizione. Ad esempio, aggiungendo il Fruit.FruitId campo:

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;

Eliminazione di una vista

Puoi rilasciare una vista utilizzando il DROP VIEW dichiarazione. In questo modo:

DROP VIEW vFruitInventory

L'istruzione precedente rimuoverà la vista denominata vFruitInventory .

Eliminazione di più visualizzazioni

Puoi eliminare più viste utilizzando lo stesso DROP VIEW dichiarazione. Separa semplicemente ogni nome di visualizzazione con una virgola. In questo modo:

DROP VIEW view_1, view_2 ...

Il IF EXISTS Clausola

Puoi anche usare il IF EXISTS clausola per evitare che si verifichi un errore se una vista non esiste:

DROP VIEW IF EXISTS view_1, view_2 ...