Lezione Precedente | Elenco Lezioni | Lezione Successiva |
Come abbiamo detto in precedenza, MySQL è un DBMS con architettura client/server.
Il vero e proprio DBMS è il programma server, che gestisce i database ed esegue i comandi SQL. Pe collegarsi al server e impartire ad esso dei comandi, è necessario un programma client. Il più semplice di tutti è il monitor di MySQL.
Per far partire il monitor, entrare in una finestra terminale e lanciare il programma mysql.
In aula informatizzata bisogna dare il comando mysql -h goemon -u <username> -p
, dove al posto di <username>
va il nome utente che avete scelto per il vostro account sul server MySQL. Il parametro -h <nomeserver>
consente di specificare su quale macchina risiede il server (goemon
nel nostro caso). L'opzione -u <username>
specifica con quale nome utente volete collegarvi e l'opzione -p
serve a specificare che ci si vuole connettere utilizzano una password (che vi verrà richiesta dal sistema). Se l'account è privo di password, NON usare l'opzione -p
.
Nel caso l'username che avete scelto per MySQL corrisponda al vostro username per l'accesso ai computer, allora basterà il comando mysql -h goemon -p
.
Il sistema risponde con qualcosa del tipo
amato@sci138$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 to server version: 5.0.24a-Debian_9-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
e attende l'immissione dei comandi. I comandi devono esseri comandi SQL validi (riconosciuti da MySQL) e terminati da un punto e virgola. Anche se premete il tasto <Enter>, il sistema non esegue alcun comando finché non inserite anche un punto e virgola.
Vediamo alcuni comandi SQL di esempio:
information_schema
, è uno schema informativo, che contiene le definizioni di tutti gli schemi e gli altri oggetti presenti nel sistema. Nella letteratura sulle basi di dati è chiamato spesso dizionario dati o catalogo di sistema e su di esso abbiamo accesso solo in lettura. Noi comunque non lo utilizzeremo.
In aula informatizzata vedrete invece tre o quattro schemi. Quello di nome mancolista
contiene i dati necessari all'applicazione La Mancolista di Paolo, che sarà il caso di studio del nostro corso. Un altro, con lo stesso nome della vostra username, è uno schema vuoto che potrete usare liberamente per svolgere le esercitazioni previste durante il corso. Infine, è presente lo schema information_schema
di cui sopra. È possibile che vediate anche uno schema dal nome airdb
che contiene dati utilizzati durante il corso nei precedenti anni accademici.
\q
) : esce dal monitor di MySQL.Sono ovviamente supportati tutti (o quasi) i comandi SQL che avete studiato nel corso di Basi di Dati: SELECT
, INSERT
, DELETE
, UPDATE
, CREATE TABLE
. Daremo per scontata la loro conoscenza per cui si consiglia caldamente, prima di affrontare le prossime lezioni, di fare un breve ripasso.
SELECT
utilizzando lo schema mancolista
. Ad esempio:
mysql> USE mancolista mysql> select * from categorie; +----+---------+ | id | nome | +----+---------+ | 1 | Fumetti | | 2 | DVD | +----+---------+ 2 rows in set (0.01 sec)Non è possibile modificare in alcun modo il contenuto di questo schema.
Ricordate che mysql> è il prompt di MySQL! Non confondetelo con il prompt della shell! Dalla shell si possono invocare altri programmi e dare comandi al sistema operativo. Dal prompt di MySQL, invece, si possono inserire dei comandi in SQL che vengono eseguiti dal server. Se provate un comando come ls il sistema risponde con
mysql> ls; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ls' at line 1Questo è un messaggio di errore standard di MySQL. C'è un numero che identifica il tipo di errore seguito dalla sua descrizione. Il primo numero (subito dopo
ERROR
) è un codice di errore specifico di MySQL, mentre il valore tra parentesi è un codice di errore standard definito dello standard SQL.
USE
viene interpretato dal monitor di MySQL, mentre gli altri comandi sono interpretati dal server di MySQL. Onde evitare problemi, basta mettere sempre il punto e virgola alla fine.test
è vuoto, non contiene neanche una tabella, il che non lo rende particolarmente utile... è il momento di iniziare a crearne qualcuna. Il comando SQL che fa a caso nostro è CREATE TABLE.
Creiamo quindi una tabella per i dipendenti di un ufficio. Prima di tutto dobbiamo entrare in uno schema, altrimenti il comando fallisce. Visto che l'unico schema esistente è test, entriamo lì dentro con il comando In aula informatizzata utilizzare USE <username>
invece di USE test
, in quanto lo schema test
non è accessibile.
Il modo più comodo di inserire questi comandi è col "taglia e incolla". Il taglia è incolla in Linux si può usare in due modi distinti:
Attenzione. I comandi di MySQL possono essere digitati sia in maiuscolo che in minuscolo, e anche nel corso di queste lezioni verranno scritti ora in un modo ora nell'altro. Attenzione però che i nomi delle tabelle, degli schemi, dei campi nelle tabelle, etc.. vanno scritti esattamente con la giusta combinazione di maiuscole e minuscole con cui sono stati creati. Ad esempio, per entrare nello schema test si può utilizzare use test
o USE test
ma non use Test
.
È possibile inserire valori nella tabella con
INSERT INTO dipendenti VALUES ('codfisc1','mario','rossi','1960-12-3',1);mysql> SELECT * FROM dipendenti;
+------------+-------+---------+-------------+----------+ | codfiscale | nome | cognome | datanascita | anniserv | +------------+-------+---------+-------------+----------+ | codfisc1 | mario | rossi | 1960-12-03 | 1 | | codfisc2 | mario | bianchi | NULL | 0 | +------------+-------+---------+-------------+----------+ 2 rows in set (0.00 sec)
Notare i valori di default per i campi datanascita e anniserv.
\c
invece che con il punto e virgola. Se un comando termina con \c esso non viene eseguito.
+-------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------+------+-----+---------+-------+ | codfiscale | char(16) | NO | PRI | NULL | | | nome | char(30) | YES | | NULL | | | cognome | char(30) | YES | | NULL | | | datanascita | date | YES | | NULL | | | anniserv | int(11) | YES | | 0 | | +-------------+------------+------+-----+---------+-------+ 6 rows in set (0.00 sec)I campi field e type sono autoesplicativi. Il campo Null indica se il corrispondente attributo può assumere valori nulli oppure no, il campo Key specifica qual è la chiave primaria della tabella, e il campo Default indica i valori di default dei vari attributi. Vedremo in futuro il significato del campo Extra.
SELECT
quando si vuole visualizzare un tabella dotata di troppe colonne;\G
. Questa indica al monitor MySQL di visualizzare il risultato del comando in un altro formato, più adatto nel caso di tabelle particolarmente "larghe". Ad esempio, confrontare l'output normale di SELECT * FROM dipendenti con quello qui di seguito:mysql> SELECT * FROM dipendenti\G *************************** 1. row *************************** codfiscale: codfisc1 nome: mario cognome: rossi datanascita: 1960-12-03 anniserv: 1 *************************** 2. row *************************** codfiscale: codfisc2 nome: mario cognome: bianchi datanascita: NULL anniserv: 0 2 rows in set (0.00 sec)
Se a MySQL viene fornito un comando non valido, si verifica un errore che viene visualizzato sullo schermo. Ad esempio, questo è quello che succede se diamo un comando inesistente come ls
o prxy
. Talvolta si verifica nella esecuzione di un comando una condizione anomala ma non critica, per cui il comando viene eseguito lo stesso ma vengono generati dei warning (avvertimenti). Ad esempio, il comando
INSERT INTO dipendenti VALUES ('codfisc3','mario','rossi','1960-2-31',2);
genera un warning, causato dal fatto che non esiste il 31 febbraio 1960. I warning non vengono visualizzati automaticamente, ma solo la loro presenza e il loro numero viene segnalato.
Due utili comandi per operare con errori e warning sono:
SHOW ERRORS
: visualizza l'elenco degli errori verificatisi nell'esecuzione dell'ultimo comando;SHOW WARNINGS
: visualizza l'elenco dei warning e degli errori verificatisi nell'esecuzione dell'ultimo comando.Ad esempio:
mysql> INSERT INTO dipendenti VALUES ('codfisc3','mario','rossi','1960-2-31',2); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+--------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------+ | Warning | 1265 | Data truncated for column 'datanascita' at row 1 | +---------+------+--------------------------------------------------+ 1 row in set (0.00 sec)
In alternativa, il comando WARNINGS
(o il sinonimo \W
) dice al monitor di MySQL di visualizzare automaticamente i warnings quando si verificano. Il contrario è NOWARNING
(o il sinonimo \w
), che ripristina il comportamento di default.
You asked for help about help category: "Contents" For more information, type 'help <item>', where <item> is one of the following categories: Account Management Administration Data Definition Data Manipulation Data Types Functions Functions and Modifiers for Use with GROUP BY Geographic Features Language Structure Storage Engines Stored Routines Table Maintenance TransactionsSi possono richiedere informazioni aggiuntive su uno degli argomenti col comando
HELP <argomento>
. Ad esempio, per informazioni sui tipi di dato supportati da MySQL, usare il comando HELP Data Types. I messaggi di aiuto per alcuni argomenti rimandano a loro volta a sotto-argomenti.HELP DROP TABLE
:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE]Notare che ci sono parole in maiuscolo e parole in minuscolo. Le parole in maiuscolo vanno scritte così come sono (ma, come abbiamo detto, si può usare una qualunque combinazione di maiuscole e minuscole). Le parole in minuscolo vanno invece sostituite con dei valori opportuni. In particolare
tbl_name
va sostituita con il nome della tabella che si vuole cancellare. Le parti tra parentesi quadre sono opzionali (si possono mettere oppure no). Le barre verticali separano delle alternative, tra le quali occorre scegliere. Infine, i tre puntini indicano che la parte precedente può essere ripetuta zero o più volte (in questo caso, stanno ad indicare che si possono specificare un qualunque numero di tabelle separate da virgole). Ad esempio, i seguenti comandi sono sintatticamente validi:DROP TABLE IF EXISTS dipendenti RESTRICT
dRoP TABLE dipendenti, prova
DROP TABLE IF EXISTS dipendenti RESTRICT CASCADE
DROP TABLE RESTRICT
DROP dipendenti
DROP SCHEMA
(che serve a cancellare uno schema):
DROP {DATABASE | SCHEMA} [IF EXISTS] db_nameSi noi l'uso della barra verticale tra parentesi graffe invece che quadre. Questo vuol dire che
DATABASE
e SCHEMA
sono in alternativa l'uno con l'altra, ma che una delle due va messe obbligatoriamente.
Oltre al programma monitor, esistono altre interfacce utente per MySQL, alcune delle quali sviluppate dalla stessa MySQL AB. Queste interfacce, spesso di tipo grafico, facilitano il lavoro con MySQL, consentendo di effettuare gran parte delle operazioni di amministrazione da un ambiente più confortevole che non la linea di comando.
Tra queste interfacce grafiche, quelle installate in aula informatizzata sono:Ovviamente, come nel caso del monitor di MySQL, è possibile collegarsi a un server remoto: basta specificare il nome del computer a cui collegarsi, nome utente e password (se necessaria) da usare per il collegamento.
In realtà queste applicazioni sono state dismesse e sostituite con una applicazione molto più versatile denominata MySQL Workbench.
Infine, un'applicazione molto utilizzata per accedere ai server MySQL è phpMyAdmin. Si tratta di una applicazione web, da utilizzare con un browser, e quindi richiede la presenza sul computer di un software che faccia da server web. A causa di ciò l'installazione di phpMyAdmin potrebbe non essere tra le più semplici (ma io non lo uso, quindi non so darvi informazioni precise).
Lezione Precedente | Elenco Lezioni | Lezione Successiva |