Sei sulla pagina 1di 4

Laboratorio di basi di dati

Turno M-Z

14 Aprile 2011

Introduzione al DBMS SQLite


SQLite (www.sqlite.org) è una libreria open source che offre le funzionalità di un
DBMS relazionale. Attualmente, viene utilizzata da numerose applicazione e dispositivi
che necessitano di memorizzare ed elaborare dati senza le complicazioni di un DBMS
di classe enterprise. Infatti, SQLite non segue il paradigma client-server usato dalla
maggior parte dei DBMS.
SQLite memorizza un intero database (composto da tabelle, viste, indici. . . ) in un
singolo file codificato in un formato cross-platform.
Solitamente le basi di dati create da SQLite sono gestite e interrogate usando le API
definite dalla libreria. Tuttavia, è inoltre disponibile un programma, eseguibile dalla
shell, che consente di manipolare le basi di dati tramite comandi e interrogazioni nel
linguaggio SQL.
Come spesso avviene, il linguaggio supportato differisce in una certa misura dal-
lo standard SQL. Rispetto allo standard SQL92, le seguenti funzionalità non sono
supportate:
• le varianti RIGHT e FULL OUTER JOIN non sono supportare; solo il join esterno di
tipo LEFT OUTER JOIN è implementato;
• sono supportate solo le varianti RENAME TABLE e ADD COLUMN del comando ALTER TABLE;
altre operazioni quali DROP COLUMN, ALTER COLUMN e ADD CONSTRAINT non sono
dispobili;
• trigger del tipo FOR EACH STATEMENT non sono supportati;
• le viste sono di sola lettura: non è possibile eseguire i comandi DELETE, INSERT e
UPDATE su viste;
• poiché SQLite legge e scrive su un singolo file, vengono applicati i permessi di
accesso forniti dal filesystem; i comandi GRANT e REVOKE non sono pertanto sup-
portati.

1
Nel corso di queste esercitazioni verrà impiegata l’utility “sqlite3”, che permette
di accedere alle basi di dati create con SQLite tramite il linguaggio SQL. L’utility
può essere scaricata liberamente all’indirizzo http://www.sqlite.org/download.html
(sezione “Precompiled Binaries For Windows”) e non richiede installazione.
Il programma si esegue digitando il comando sqlite3 dal prompt della shell (il co-
mando cmd.exe), seguito dal nome del file in cui si trova la basi di dati su cui si vuole
operare. Se il nome del file non corrisponde adu una base di dati esistente, ne verrà creata
una vuota. È anche possible evitare di specificare il file, in tal caso la base di dati verrà
creata in memoria e tutte le modifiche verranno quindi perse al termine dell’esecuzione
del programma.
A questo punto dovrebbe comparire il seguente messaggio:

Il prompt “sqlite>” ci comunica che il programma è pronto ad accettare i comandi


SQL, che devono terminare con il carattere ‘;’. Il programma comunicherà a video la
risposta.
Oltre ai comandi del linguaggio SQL esistono una serie di comandi aggiuntivi che
consentono, ad esempio, di importare ed esportare i dati in formato testuale. Il coman-
do .help mostra un elenco di tali comandi. Ad esempio, il comando .exit termina
la sessione corrente ed esce dal programma (tutti i comandi aggiuntivi iniziano con il
carattere ‘.’).

Tipi di dato in SQLite


La maggior parte dei DMBS impiega un “type system” statico: il tipo di dato di un
valore dipende unicamente dalla colonna corrispondente. SQLite usa invece un sistema
dinamico: il tipo di un valore è associato al valore stesso, non al suo contenitore. Ad
esempio, è possibile omettere le dichiarazioni di tipo dell’istruzione CREATE TABLE:

CREATE TABLE TabellaDiProva(PrimoCampo, SecondoCampo, TerzoCampo);

2
Tuttavia, il sistema dinamico è perfettamente compatibile con quello statico (nel senso
che i comandi SQL si comportano allo stesso modo).
Nel corso delle esercitazioni cercate di usare il più possibile il linguaggio SQL con
la sintassi vista in aula. All’indirizzo www.sqlite.org/docs.html è disponibile una
descrizione completa del variante del linguaggio SQL impiegata da SQLite.

Esercizi
Si consiglia di usare un editor di testo per mantenere una copia dei comandi che invierete
a SQLite. In questo modo li potrete correggere e ripetere rapidamente in caso di errore.

Esercizio 1 Si consideri il seguente schema:


STUDENTE(Nome, Cognome, Matricola)
CORSO(Codice, Nome, Docente)
ESAME(Corso, Data, Studente, Voto, Lode)
1. individuare le chiavi primarie e le chiavi esterne;
2. individuare gli eventuali altri vincoli;
3. creare una base di dati esami.bd e usare il comando CREATE TABLE per definire le
tabelle; cercate di specificare il maggior numero possibile di vincoli;
4. usare l’istruzione SQL INSERT ... INTO VALUES... per popolare le tabelle, STUDENTE
e CORSO (usate dati di fantasia, purché ci siano almeno 4–5 righe per ciascuna
tabella);
5. usate l’istruzione SELECT per visualizzare i dati che avete inserito.
Nota: SQLite non ha un tipo specifico per rappresentare le date: usate pure un campo
testuale. I campi possono assumere tipo ‘bool’: le relative costanti sono i numeri ‘0’ e
‘1’ che hanno valore logico ‘falso’ e ‘vero’.
Nota: potete usare il comando ‘.schema <nometabella>’ per controllare lo schema
delle tabelle che avete creato, e il comando ‘.tables’ per ottenere un elenco delle tabelle
nella base di dati.

Esercizio 2
1. Usando un editor di testo, create un file ‘voti.txt’ contenente alcune righe della
tabella esame (a vostra scelta, almeno una decina). I campi di ciascuna riga
dovranno essere separati dal carattere ‘|’. Esempio:

1|10-5-2010|123456|25|0
1|10-5-2010|123457|20|0
2|12-5-2010|123458|30|1
...

3
2. Usate il comando .import per copiare i dati dal file ‘voti.txt’ alla tabella Esame
(per ulteriori dettagli usato il comando .help o consultate la documentazione
online di SQLite);

3. usate il comando SELECT per verificare il contenuto delle tabelle.

4. salvate le righe della tabella STUDENTE in un file ‘studente.txt’. Per fare ciò:
a) usate il comando ‘.output studente.txt’;
b) eseguite il comando SELECT opportuno;
c) ripristinate l’output a video con il comando ‘.output stdout’.

Esercizio 3 Eseguite le seguenti interrogazioni (potete cambiare i valori indicati nel


testo per adttare le interrogazioni ai dati che avete effettivamente inserito nelle tabelle):

1. elencare il numero di matricola degli studenti che hanno ottenuto un voto superiore
a 25 nel corso con codice ‘1’;

2. calcolare la media degli studenti di cognome ‘Rossi’;

3. calcolare il voto minimo e massimo per il corso di ‘programmazione’;

4. selezionare nome e cognome degli studenti che hanno ottenuto un voto maggiore
a 24 nel corso di ‘programmazione’.

Esercizio 4 Eseguiti i seguenti comandi di aggiornamento della base di dati (dopo


averne effettuato una copia di backup):

1. cambiate in ‘basi di dati’ il nome del corso con codice ’1’;

2. eliminate dalla base di dati tutti gli studenti di cognome ‘Rossi’;

3. eliminate dalla base di dati tutti i voti con lode;

4. aumentate di due punti tutti i voti inferiori a 29.