Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

MySQL 5: le novità del nuovo database

Cosa c'è di nuovo nelle recenti versioni di MySQL: dalle Unioni e Subquery della versione 4 alle Stored Procedures e Triggers della versione 5.
Cosa c'è di nuovo nelle recenti versioni di MySQL: dalle Unioni e Subquery della versione 4 alle Stored Procedures e Triggers della versione 5.
Link copiato negli appunti

Introduzione

Mentre molti server nostrani si ostinano a mantenere una versione 3.23.x, la MySQL AB (che come si può intuire è la società che sviluppa il noto RDBMS) ha rilasciato nel giro di un anno (Ottobre 2004 - Ottobre 2005) ben due major release del suo software di punta, mandando in pensione quelle precedenti. Per major release si intende una versione del software che introduce grosse novità (come ad esempio la versione 5 di PHP), e queste versioni di MySQL includono novità molto sostanziose.

Le novità

Analizziamo brevemente solo le caratteristiche più significative introdotte dalle varie versioni di mysql:

  • La versione 4.0 ha introdotto le UNIONI (Unions caching
    [!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

    ).

  • La versione 4.1 ha introdotto le SUBQUERY, il supporto per OpenGIS, un maggior numero di
  • storage engine (prima di questa versione erano supportati solo ISAM, MyISAM, INNODB), un supporto molto scalabile per la localizzazione.
  • La versione 5.0 ha introdotto STORED PROCEDURES, VISTE (Views), Cursors, TRANSAZIONI (Transactions), TRIGGERS, ulteriori storage engine.

Insomma, anche se nato per essere un RDBMS veloce ma privo delle caratteristiche essenziali per un utilizzo slegato dall'ambito web, MySQL sta compiendo una rapida metamorfosi per portarsi su standard qualitativi più elevati non peggiorando per questo le sue prestazioni. Insomma, un database server che, mattone dopo mattone, cresce aggiungendo funzionalità.

Nel corso di questo articolo cercherò di illustrare con termini semplici cosa rappresentano in concreto queste novità e in quali ambiti è possibile sfruttarle senza però scendere in campo pratico. Questo aspetto senza dubbio molto importante verrà infatti trattato in articoli successivi.

Unioni (Unions)

Presenti dalla versione: 4.0, Manuale:

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

Il comando UNION JOIN

Capita spesso di trovarsi di fronte a un database mal progettato

Questo comando agisce sempre come DISTINCT (seleziona cioè sempre record unici). Per poter selezionare anche i "doppioni" è necessario utilizzare UNION ALL.

Esempio:

Tabella Impiegati_Lombardia(ID, Nome, Cognome) 
Tabella Impiegati_Toscana(ID, Nome, Cognome) 
Query
                

    
        
    
        
            
            
    
            
        
        
            

        
                

            
                            
                                        
                                
                            
            
                

Subquery

Presenti dalla versione: 4.1, Manuale:

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

.

Si utilizzano le subquery ogni qual volta si voglia confrontare i valori contenuti in un recordset di una query con quelli di un altro. Nell'ambito web probabilmente questa è la caratteristica che più mancava a mysql e che imponeva l'utilizzo di complicate JOIN oppure di workaround eseguti nel linguaggio di programmazione con il quale ci si interfacciava a MySQL.

L'esempio più comune dell'utilizzo di una subquery è dato dal dover selezionare da una tabella solo i record che non rispettano una determinata relazione con una seconda:

SELECT colonne FROM tabella_1 WHERE valore_1 NOT IN (SELECT valore_2 FROM tabella_2)

Prima della versione 4.1 del RDBMS non era possibile eseguire questa query ed era invece necessario compiere questi passaggi da PHP:

  • Selezionare tutti i valori del campo valore_2 tabella_2
  • Popolare un array con tutti questi valori.
  • Eseguire una query in cui confrontare il campo valore_1 tabella_1

In alternativa era possibile sfruttare una LEFT JOIN (come descritto in questa pagina del

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

. Non vi è dubbio però che le subquery rendano di più facile comprensione l'intera query permettendoci più rapidi sviluppi e manutenzioni.
Nell'implementazione MySQL delle subquery esistono comunque delle

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

.

Stored Procedures

Presenti dalla versione: 5.0, Manuale:

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

Iniziamo la carrellata delle nuove caratteristiche introdotte dalla versione 5.0 (che tra l'altro è la versione stabile raccomandata dalla MySQL AB) con le STORED PROCEDURES

Questo passaggio permette di:

  • Rendere disponibile agli script che si interfacciano con il nostro database un set di API in modo da essere sicuri del funzionamento di una query su tutti i sistemi.
  • Semplificare notevolmente le query attraverso l'uso di chiamate a funzioni personalizzate.

Esattamente come le funzioni dei linguaggi di programmazione, le stored procedures possono essere composte da valori in input, valori in output, tipi di valori (è necessaria la dichiarazione del tipo di variabile utilizzata), costrutti di controllo del flusso (if/then/else, case, cicli

In MySQL le stored procedures devono essere dichiarate sempre tramite una query di tipo CREATE FUNCTION SHOW FUNCTION STATUS SHOW CREATE FUNCTION

Se vogliamo modificare una funzione creata in precedenza possiamo usare ALTER FUNCTION DROP FUNCTION CREATE PROCEDURE, SHOW PROCEDURE STATUS, SHOW CREATE PROCEDURE, ALTER PROCEDURE e DROP PROCEDURE

Anche questa caratteristica del RDBMS presenta delle

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

.

Ritorneremo in seguito sulle procedure dato che saranno oggetto di un prossimo articolo.

Cursori (Cursors)

Presenti dalla versione: 5.0 Manuale:

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

.

I cursori sono dei puntatori ai recordset di specifiche query utili da utilizzare soprattutto nell'ambito delle procedure personalizzate. Permettono di accedere a questi recordset e, tramite il comando FETCH assegnare i valori dei vari campi a specifiche variabili (un comportamento molto simile a quello che in PHP risulta essere il foreach).

Triggers

Presenti dalla versione: 5.0, Manuale:

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

Altra caratteristica molto interessante è rappresentata nel linguaggio SQL dai trigger

Un esempio banale dell'utilizzo dei trigger potrebbe essere quello di mantenere i valori di un determinato campo sempre all'interno di un range di valori (esempio [0, 100]). Ogni volta che quel campo viene aggiornato si attiva un trigger che controlla il nuovo valore e, nel caso in cui esca dal range accettato lo sostituisce con un valore di default. In questo modo ci si trova sempre con un database efficiente e con dei dati "accettabili" senza dover replicare i controlli dal linguaggio di programmazione per tutte le query eseguite.

Viste (Views)

Presenti dalla versione: 5.0, Manuale:

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

è anche possibile da questa versione di MySQL creare delle viste sulle query. In questo modo è possibile creare quelle che a tutti gli effetti agiscono come delle tabelle temporanee già popolate. Il fatto interessante è rappresentato dalla complessità delle query che si possono eseguire: possono contenere funzioni o calcoli complessi. La vista permette di salvare i risultati di un recordset; in questo modo è possibile selezionare i risultati di operazioni dispendiose dal punto di vista prestazionale senza doverle rieseguire ogni volta. Sono molto utili soprattutto nel caso in cui il numero di SELECT sia molto superiore al numero di operazioni di scrittura sulla tabella.

Transazioni (Transactions)

Presenti dalla versione: 5.0, Manuale:

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

Dalla versione 5.0 MySQL introduce anche il concetto di transazioni, anche se limitate alle sole tabelle di tipo InnoDB

Le transazioni risultano essere molto utili ad esempio in complicate fasi di INSERT multiple in cui le insert successive dipendono da quelle precedenti: non bisogna gestire i vari errori dal linguaggio di programmazione e si è sicuri di non avere incongruenze nel database.

Anche le transizioni saranno oggetto di un articolo più tecnico e approfondito in futuro.

Conclusioni

E nel futuro? È a buon punto anche lo sviluppo della versione 5.1 di MySQL che verrà rilasciata come beta a breve. Tra le caratteristiche più interessanti di questa ennesima versione troveremo probabilmente il supporto per le FOREIGN KEYS (gli indici esterni) esteso ai vari tipi di tabelle e non più solo alle InnoDB.

  • [!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager
  • [!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager
  • [!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager
  • [!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

Questo articolo contiene link di affiliazione: acquisti o ordini effettuati tramite tali link permetteranno al nostro sito di ricevere una commissione nel rispetto del codice etico

Ti consigliamo anche