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 ...