In questi giorni ho avuto a che fare con le viste in MySQL.
Detta in parole povere una view è una tabella virtuale formata dal risultato di una SELECT.
Una volta salvata una view è simile a una classica tabella, formata da righe e colonne ed è interrogata come una normale tabella.
L'utilizzo dell views porta con se diversi vantaggi:
- semplifica query complesse
- limita l'accesso ad alcuni dati che si vogliono tenere nascosti
- extra security derivata dal fatto che la view è una tabella a sola lettura; gli utenti possono solo visualizzare i dati
- ecc
Creare una view non è difficile.
La sintassi genereale è questa:
CREATE
[ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}]
VIEW [database_name]. [view_name]
AS
[SELECT statement]
Con MERGE la SELECT viene "mescolata" con l'istruzione che richiama la vista stessa.
Con TEMPTABLE la SELECT relativa alla vista viene utilizzata per creare una tabella temporanea, sulla quale viene poi eseguita l'istruzione richiesta.
Con UNDEFINED sceglierà MySQL cosa usare, ed in genere preferisce MERGE.
UNDEFINED è l'impostazione di default.
Come nome potete impostare sia il nome col prefisso del nome del db, che senza.
Infine abbiamo l'istruzione SELECT che segue alcune regole:
- non possono essere incluse subquery
- non possono essere usate variabili
- non possono essere usati prepared statement
- non possono essere usate altre view o tabella temporenee
- non possono essere associate a triggers
Vi mostro la mia view:
CREATE VIEW bookv
AS
SELECT name, author_name, editor_name, price, isbn, note
FROM book
INNER JOIN author ON book.author_id=author.author_id
INNER JOIN editor ON book.editor_id=editor.editor_id;
Come potete vedere nulla di complicato e se andate a controllare le tabelle del vostro db comparirà anche la view:
mysql> show tables;
+-------------------+
| Tables_in_library |
+-------------------+
| author |
| book |
| bookv |
| editor |
+-------------------+
A questo punto vi basterà interrogare la view per recuperare quei dati:
SELECT * FROM bookv;
VISTE AGGIORNABILI