Fondamentalmente esistono 4 modalità per comunicare con un Database server e inviare istruzioni in grado di interrogare e manipolare i dati da esso gestiti:
- la modalità interattiva: di solito eseguita da linea di comando tramite shell Linux o prompt di MsDos (Windows);
- la modalità batch: cioè non effettuata interattivamente ma sulla base di comandi preventivamente definiti;
- l'utilizzo di un file di testo: tipicamente un file contenente istruzioni da passare all'esecutore del Database server;
- l'interazione tramite applicativo: per esempio un programma realizzato in Java o uno script PHP (ad esempio PhpMyAdmin) che mettono a disposizione un'interfaccia con cui eseguire istruzioni SQL.
Nelle pagine seguenti verranno analizzate in particolare le caratteristiche relative all'esecuzione di istruzioni SQL verso DBMS MySQL tramite modalità batch e da file di testo.
Il concetto di batch mode
In linea generale è possibile riscontrare in una o più istruzioni eseguite in modalità batch le seguenti caratteristiche:
- l'esecuzione non immediata di comandi ma programmata nel tempo, in molti casi questa esecuzione è destinata a ripetersi sulla base di intervalli di tempo definiti dall'utilizzatore;
- la possibilità di eseguire più comandi simultaneamente (cioè tutti insieme) o sequenzialmente (cioè uno dopo l'altro);
- la mancanza di interattività tra utente e applicazione, tipicamente infatti i comandi eseguiti in batch mode non richiedono l'intervento diretto dell'utilizzatore, anzi, la modalità batch viene utilizzata non di rado proprio per lasciare al sistema il compito di svolgere operazioni spesso ripetitive (si pensi per esempio alle istruzioni programmate tramite Crontab);
- la possibilità di manipolare, ed eventualmente di modificare, più dati contemporaneamente compiendo velocemente operazioni che comporterebbero per l'utilizzatore anche lunghe digitazioni di istruzioni e un significativo impegno in termini di tempo.
I file di batch sono generalmente dei file destinati a contenere un elenco di istruzioni che devono essere eseguite sequenzialmente nel momento in cui viene richiamato il file, in questo modo sarà possibile rendere più semplici operazioni da eseguire frequentemente e non di rado ripetitivamente.
Diverso è invece il discorso riferito ai Batch Job (procedure o compiti eseguiti in modalità Batch), tramite questa definizione si intende infatti indicare un applicativo destinata ad eseguire una sequenza di istruzioni senza che per questo sia richiesto l'intervento da parte di un utilizzatore; come anticipato, in determinati casi è possibile programmare dei Batch Job in modo da eseguire le istruzioni previste tenendo conto di intervalli di tempo o di orari predefiniti (sheduling).
Il batch mode come alternativa alla modalità interattiva
La modalità più immediata per inviare istruzioni ad un Database server MySQL è quella interattiva, essa si esegue attraverso digitazioni da linea di comando; da shell Linux è per esempio possibile connettersi al DBMS con una semplice istruzione simile alla seguente:
shell> mysql -h hostname -u username -p
Verrà richiesta la password per l'autenticazione dell'utente in connessione è sarà possibile inviare istruzioni direttamente all'esecutore dell'applicazione; ad esempio, se si desiderasse visualizzare i database disponibili per l'utente connesso sarà possibile utilizzare il seguente comando:
mysql> SHOW DATABASES;
La modalità interattiva però implica un intervento diretto da parte dell'utilizzatore per operazioni come per esempio quelle destinate all'interrogazione (query) del database, l'alternativa più veloce è quella di sostituire il batch mode alla modalità interattiva. Vediamo come fare nella prossima pagina.
Il batch mode consiste in una procedura molto semplice da effettuare, esso richiede infatti di scrivere le istruzioni che si intendono eseguire all'interno di un file, questo file potrà essere letto dal DBMS con un semplice comando simile al seguente:
shell> mysql < nome_file_di_batch
La procedura appena descritta riguarda naturalmente l'esecuzione di istruzioni in modalità batch tramite shell all'interno di sistemi Unix o Unix-like come Linux. Per quanto riguarda le piattaforme Windows, invece, è necessario tenere conto del fatto che la presenza di alcuni caratteri speciali all'interno del file potrebbe dare origine a problemi e malfunzionamenti; per evitare questa eventualità il file di batch dovrà dunque essere richiamato in questo modo:
C:> mysql -e "source nome_file_di_batch"
Naturalmente, sarà possibile combinare istruzioni espresse tramite diverse modalità, a questo scopo nell'esempio seguente viene presentata un'istruzione in modalità interattiva che contiene anche la chiamata ad un file di batch, per poi eseguire l'autenticazione tramite password nuovamente in modalità interattiva:
shell> mysql -h hostname -u username -p < nome_file_di_batch Enter password:
Tipicamente un file di batch viene realizzato per eseguire comandi senza l'intervento dell'utilizzatore, questo però non esclude la possibilità che possano verificarsi degli errori i grado di bloccare l'esecuzione delle istruzioni; anche questa eventualità può essere però scongiurata, l'introduzione dell'argomento --force da linea di comando al momento della chiamata del file di batch permette infatti alle istruzioni di proseguire anche in caso di errore.
Ma perché preferire la modalità batch a quella interattiva? In linea di massima non è possibile stabilire quali delle due modalità sia da privilegiare, è comunque possibile individuare delle caratteristiche che rendono il batch mode uno strumento estremamente utile in alcuni casi:
- non sempre è possibile utilizzare la modalità interattiva, per esempio è necessario utilizzare il batch mode quando si desidera eseguire query tramite cron job;
- le istruzioni presenti in un file di batch possono essere corrette facilmente, quando si inserisce un errore di sintassi in un'istruzione lanciata in modalità interattiva questa dovrà essere digitata di nuovo, questo è vero in particolare nei casi in cui vengono eseguite istruzioni su più righe e che contengono più sequenze di comandi;
- le istruzione contenute in un file di batch possono essere copiate per applicare su di esse parziali modifiche, anche in questo caso non sarà necessario digitare di nuovo interamente una sequenza di comandi;
- i file di batch possono essere distribuiti, per esempio tra i componenti di uno stesso team, evitando così di ripetere inutilmente un lavoro già eseguito da altri;
- la modalità interattiva, che necessita dell'intervento dell'utilizzatore, non permette di programmare l'esecuzione di istruzioni sulla base di intervalli ripetuti di tempo o periodicamente sulla base di date e orari.
Inoltre, la chiamata di un file di batch permette di impaginare i risultati di un'istruzione che prevede la generazione di una grande quantità di output, come nell'esempio seguente:
shell> mysql < nome_file_di_batch | more
Oppure di salvare l'output di una o più istruzioni all'interno di un file con un semplice comando:
shell> mysql < nome_file_di_batch > mysql.out
Da notare che l'output generato dall'esecuzione di un'istruzione in modalità interattiva è differente da quello previsto per il batch mode; per esempio, nel caso di una SELECT
, la modalità interattiva produrrà una tabella contenente i risultati, il batch mode si limiterà invece a mostrare gli output elencati uno per ogni riga. Per ottenere i risultati "tabellati" anche con il batch mode, sarà necessario utilizzare il comando mysql -t
.
Eseguire istruzioni da file di testo
Oltre al batch mode esiste un'altra alternativa molto simile per sostituire la modalità interattiva nell'esecuzione di istruzioni dirette verso MySQL, questa prevede di inserire i comandi all'interno di un semplice file di testo; per fare un esempio, si può prendere il caso di un'istruzione digitata in modalità interattiva come la seguente:
shell> mysql USE nome_database
La stessa istruzione potrà essere seguita dal nome di un file di testo che potrà essere richiamato perché venga letto dal DBMS, come nell'esempio seguente
shell> mysql USE nome_database < nome_file
Inoltre, se come prima istruzione all'interno del file di testo dovesse essere inserito il comando USE nome_database
, questo non dovrà essere specificato nuovamente da linea di comando:
shell> mysql < nome_file
Nel caso in cui il Database server sia già in esecuzione, sarà possibile utilizzare il comando source
o in alternativa .
per richiamare un file contenente delle istruzioni scritte in linguaggio SQL, ad esempio:
mysql> source nome_file mysql> . nome_file
Conclusioni
L'utilizzo della modalità batch e di file di testo per l'esecuzione di istruzioni SQL sono delle utili alternative alla modalità interattiva tramite linea di comando; in questa breve trattazione sono state analizzate le caratteristiche e la sintassi di queste due modalità sottolineandone i vantaggi in termini di minori necessità d'intervento da parte dell'utilizzatore, possibilità di programmazione e periodizzazione delle istruzione e conseguente risparmio di tempo e lavoro.