Lezioni di Informatica
"Una volta che abbiate conosciuto il volo, camminerete sulla terra guardando il cielo" [ L. da Vinci ]
Informazioni sul Sito
N. visitatori  000059263  dal 21/01/2007  |   e-mail: ksoft64camera@gmail.com   
Cerca nel sito
Documenti collegati alla pagina
MySQL

il logo del prodotto MySQL è uno dei più diffusi DBMS in rete.
E' multipiattaforma in quanto può essere installato su tutti i sistemi operativi. E' un software libero ed è uno dei pù completi DBMS relazionali.

Tratterò del suo utilizzo su sistema Linux e mi riferirò all'uso del terminale anche se esistono strumenti GUI che facilitano notevolmente la gestione e la manutenzione del DBMS (emma, mysql-workbench, phpmysqladmin, etc.).

La scelta ha un significato didattico perché abitua lo studente ai comandi nel caso debba lavorare su un server.

Immaginando di aver progettato un modello E-R biblioteca farò riferimento a questo nella trattazione.

Installazione del software in Linux (Debian e Ubuntu)

Dal menu Applicazioni scegliere Accessori e poi aprire Terminale
Digitare il seguente comando e dare INVIO
sudo apt-get install apache2 mysql-server mysql-client
Sarà richiesta la password utente. Digitare la password e poi INVIO
Appare la lista dei pacchetti collegati da installare.
Digitare s e poi INVIO per confermare l'installazione.

Vengono scaricati, dall'apposito repository, tutti i pacchetti e poi inizia l'intallazione.
Durante l'installazione (circa 3 minuti in ADSL) sarà richiesta per due o tre volte la password per il server MySQL.
Consiglio di non inserirla e di dare solo INVIO.
A questo punto abbiamo a disposizione un server DBMS (mysql-server) con un'interfaccia client (mysql-client) minimale che si appoggia sul server web Apache (apache2).

 

Accesso tramite il client

Sempre da Terminale digitare il seguente comando e dare INVIO
mysql -u nome_utente -p
Sarà richiesta la password utente. Digitare la password e poi INVIO
Si accede all'ambiente mysql-client e appare
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is ...
Server version: ...

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

dove l'ultima riga rappresenta il prompt dei comandi

Per uscire dall'ambiente basta digitare:
\q e poi INVIO
 

Creazione di un database

Dopo essere entrati nelle sessione client (v. paragrafo precedente) adesso possiamo creare un database.
Digitare il seguente comando e poi INVIO
create database biblioteca;
Il dbms risponderà così
Query OK, 1 row affected (0.04 sec)

mysql> 
e ci fa capire che la richiesta è andata a buon fine, ha interessato una riga di codice e ha impiegato 4 centesimi di secondo.
Per vedere la lista dei data base digitiamo:
show databases;
e poi INVIO
Troveremo, nella lista dei data base, anche il nostro data base biblioteca appena creato.
+--------------------+
| Database           |
+--------------------+
| ..........         |
| biblioteca         |
| ..........         |
| ..........         |
| ..........         |
+--------------------+
... rows in set (... sec)
 

Accesso a un database

Dopo aver creato un database (v. paragrafo precedente) possiamo accedervi per creare tabelle, query, etc. Digitare il seguente comando e poi INVIO
use biblioteca;
Il dbms risponderà così
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> 
e ci fa capire che siamo conenssi con un id (identificatore univoco) e abbiamo la possibilità di lavorare sul database biblioteca.
 

Creazione di una tabella

Dopo l'accesso al database (v. paragrafo precedente) possiamo creare la nostra prima tabella che chiameremo libri.
Digitare il seguente comando e poi INVIO
create table libri (IDL int not null, autore varchar(30) 
not null, titolo varchar(50) not null, primary key(IDL)) engine=innoDB;
Il dbms risponderà così
Query OK, 0 rows affected (0.16 sec)

mysql>
e ci fa capire che la richiesta è andata a buon fine, non ha interessato righe di tabella o istanze e ha impiegato 16 centesimi di secondo.
Per vedere la lista delle tabelle digitiamo:
show tables;
e poi INVIO
Troveremo la nostra tabella libri appena creata.
+----------------------+
| Tables_in_biblioteca |
+----------------------+
| libri                |
+----------------------+
1 row in set (0.01 sec)

mysql> 
Per vedere la struttura della tabella libri digitiamo:
describe libri;
e poi INVIO
Il risultato sarà
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| IDL    | int(11)     | NO   | PRI | NULL    |       |
| autore | varchar(30) | NO   |     | NULL    |       |
| titolo | varchar(50) | NO   |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (... sec)

mysql> 

 

Modifica della struttura di una tabella

Modificare la struttura significa utilizzare il comando alter table per:
Rinominare una tabella
Vogliamo cambiare il nome alla tabella libri sostituendolo con testi
Digitare il seguente comando e poi INVIO
alter table libri rename testi;
Il dbms risponderà così
Query OK, 0 rows affected (... sec)

mysql>
Per vedere la lista delle tabelle digitiamo:
show tables;
e poi INVIO
Troveremo la nostra tabella libri appena creata.
+----------------------+
| Tables_in_biblioteca |
+----------------------+
| testi                |
+----------------------+
1 row in set (... sec)

mysql> 
e abbiamo constatato il cambiamento del nome della tabella.
 
Aggiungere un campo in coda
Vogliamo aggiungere il campo prezzo di tipo decimale con 10 cifre delle quali 2 dopo la virgola nella tabella testi
Digitare il seguente comando e poi INVIO
alter table libri add prezzo decimal(10,2);
Il dbms risponderà così
Query OK, 0 rows affected (... sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
Per vedere la nuova struttura digitiamo:
describe testi;
e poi INVIO
Il risultato sarà
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| IDL    | int(11)       | NO   | PRI | NULL    |       |
| autore | varchar(30)   | NO   |     | NULL    |       |
| titolo | varchar(50)   | NO   |     | NULL    |       |
| prezzo | decimal(10,2) | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
4 rows in set (... sec)
 

 
Aggiungere un campo in mezzo
Vogliamo aggiungere il campo editore di tipo stringa di lunghezza variabile non nulla tra il campo titolo e il campo prezzo
Digitare il seguente comando e poi INVIO
alter table libri add editore varchar(30) not null after titolo;
Il dbms risponderà così
Query OK, 0 rows affected (... sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
Per vedere la nuova struttura digitiamo:
describe testi;
e poi INVIO
Il risultato sarà
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| IDL     | int(11)       | NO   | PRI | NULL    |       |
| autore  | varchar(30)   | NO   |     | NULL    |       |
| titolo  | varchar(50)   | NO   |     | NULL    |       |
| editore | varchar(30)   | NO   |     | NULL    |       |
| prezzo  | decimal(10,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (... sec)

 
Aggiungere un campo in testa
Vogliamo aggiungere il campo editore collocazione di tipo stringa di lunghezza fissa (19 caratteri) non nulla da inserire prima degli altri
Digitare il seguente comando e poi INVIO
alter table testi add collocazione varchar(19) not null first;
Il dbms risponderà così
Query OK, 0 rows affected (... sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
Per vedere la nuova struttura digitiamo:
describe testi;
e poi INVIO
Il risultato sarà
+--------------+---------------+------+-----+---------+-------+
| Field        | Type          | Null | Key | Default | Extra |
+--------------+---------------+------+-----+---------+-------+
| collocazione | char(19)      | NO   |     | NULL    |       |
| IDL          | int(11)       | NO   | PRI | NULL    |       |
| autore       | varchar(30)   | NO   |     | NULL    |       |
| titolo       | varchar(50)   | NO   |     | NULL    |       |
| editore      | varchar(30)   | NO   |     | NULL    |       |
| prezzo       | decimal(10,2) | YES  |     | NULL    |       |
+--------------+---------------+------+-----+---------+-------+
6 rows in set (... sec)

mysql>

 
Eliminare un campo
Vogliamo eliminare il campo collocazione perché abbiamo deciso che non ci serve
Digitare il seguente comando e poi INVIO
alter table testi drop collocazione;
Il dbms risponderà così
Query OK, 0 rows affected (... sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
Per vedere la nuova struttura digitiamo:
describe testi;
e poi INVIO
Il risultato sarà
+--------------+---------------+------+-----+---------+-------+
| Field        | Type          | Null | Key | Default | Extra |
+--------------+---------------+------+-----+---------+-------+
| IDL          | int(11)       | NO   | PRI | NULL    |       |
| autore       | varchar(30)   | NO   |     | NULL    |       |
| titolo       | varchar(50)   | NO   |     | NULL    |       |
| editore      | varchar(30)   | NO   |     | NULL    |       |
| prezzo       | decimal(10,2) | YES  |     | NULL    |       |
+--------------+---------------+------+-----+---------+-------+
5 rows in set (... sec)

mysql>

 
Rinominare un campo
Vogliamo dare il nome prezzo_copertina al campo prezzo perché ci sembra più significativo
Digitare il seguente comando e poi INVIO
alter table testi change prezzo prezzo_copertina decimal(10,2);
Il dbms risponderà così
Query OK, 0 rows affected (... sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
Per vedere la nuova struttura digitiamo:
describe testi;
e poi INVIO
Il risultato sarà
+------------------+---------------+------+-----+---------+-------+
| Field            | Type          | Null | Key | Default | Extra |
+------------------+---------------+------+-----+---------+-------+
| IDL              | int(11)       | NO   | PRI | NULL    |       |
| autore           | varchar(30)   | NO   |     | NULL    |       |
| titolo           | varchar(50)   | NO   |     | NULL    |       |
| editore          | varchar(30)   | NO   |     | NULL    |       |
| prezzo_copertina | decimal(10,2) | YES  |     | NULL    |       |
+------------------+---------------+------+-----+---------+-------+

5 rows in set (... sec)

mysql>

 
Modificare il tipo di campo (e/o le opzioni)
Vogliamo trasformare il campo prezzo_copertina in un campo decimale con 12 cifre delle quali 2 dopo la virgola; vogliamo che non sia nullo e abbia il valore 2.00 di default
Digitare il seguente comando e poi INVIO
alter table testi modify prezzo_copertina decimal(12,2) not null default 2.00;
Il dbms risponderà così
Query OK, 0 rows affected (... sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
Per vedere la nuova struttura digitiamo:
describe testi;
e poi INVIO
Il risultato sarà
+------------------+---------------+------+-----+---------+-------+
| Field            | Type          | Null | Key | Default | Extra |
+------------------+---------------+------+-----+---------+-------+
| IDL              | int(11)       | NO   | PRI | NULL    |       |
| autore           | varchar(30)   | NO   |     | NULL    |       |
| titolo           | varchar(50)   | NO   |     | NULL    |       |
| editore          | varchar(30)   | NO   |     | NULL    |       |
| prezzo_copertina | decimal(12,2) | NO   |     | 2.00    |       |
+------------------+---------------+------+-----+---------+-------+

5 rows in set (... sec)
mysql>