LAVORARE CON MYSQL PARTE PRIMA.

Pagina creata da Nicolò Righi
 
CONTINUA A LEGGERE
Lezione 15 Lavorare con MySQL Parte Prima.

Lavorare con MySQL Parte Prima.
Data la particolarità dell’
                          argomento, ho deciso di dividerlo in due lezioni. Nella prima, si parlerà
diffusamente di MySQL, cos’   è un DBMS, cos’è l’
                                                SQL, i campi supportati da MySQL etc.

Nella seconda si vedrà in particolare come lavorare con l’  accoppiata imbattibile PHP/MySQL, ai
fini di programmare applicazioni professionali e scalabili.

Cos’è MySQL?
MySQL è un database relazionale multithread open source, sviluppato nel 1996 da una società
di consulenza svedese, la TcX, che aveva bisogno di un database veloce e che richiedeva
poche risorse, pur dovendo gestire notevoli quantità di dati.
A quel tempo non esisteva niente sul mercato che soddisfaceva queste esigenze, quindi la TcX
ha pensato bene di sviluppare da zero questo sistema (anzi, basandosi su un atrlo DBMS noto
come mSQL).
La diffusione di MySQL (oltre l’ utilizzo in università) è dovuta principalmente alla sua natura
open source e gratuita, oltre alle sue doti di velocità e flessibilità.
L’avvento di Linux e, ultimamente, l’    enorme sviluppo di PHP hanno consentito a MySQL di
essere uno dei DBMS non commerciali più utilizzati al mondo.

Ok, ma cos’
          è un database? Ed un database relazionale?

Un database è un insieme di file strutturati (a differenza dei file non strutturati, che sono una
semplice sequenza di caratteri), contenente quindi tabelle e indici per ottimizzare l’  accesso ad
esse.
Una tabella è un insieme di informazioni omogenee, suddivise in campi (le colonne della
tabella), ognuno rappresentante un’     attributo di un oggetto. Il contenuto di questo campo è il
valore dell’
           attributo.
Ogni riga della tabella identifica il singolo record.
Per chi non ha mai affrontato queste problematiche, probabilmente ci sta capendo poco?
Con un disegnino (Fig. 1) tutto sarà più chiaro (lo slogan “un’        immagine vale più di mille
parole”non lo hanno inventato i webdesigner!) :

              Domenico Nappo – Domenico Surace - Manuali.Net © Tutti i diritti riservati
Installiamo MySQL.

                                                                              Fig. 1 – DBMS,
                                                                              Tabelle, Record e
                                                                              Campi.

Nella figura precedente, è visualizzato un database composto da quattro tabelle : TblProdotti,
TblOrdini, TblGruppi e TblCLienti. In dettaglio, si può osservare la struttura della tabella
TblClienti, composta da tre campi (o colonne) : id (tipicamente esiste sempre un campo id, che
deve identificare univocamente il singolo record, nel senso che non devono esistere record
nella stessa tabella che abbiano lo stesso valore nel campo chiave), cog che contiene il
cognome di un cliente ed infine un campo email.

Il singolo record corrisponde ad una riga ed identifica un oggetto descritto da tutti i valori
contenuti nei campi (nel nostro caso l’
                                      oggetto è il cliente, descritto dai valori id, cognome ed
indirizzo e-mail).

MySQL è un DBMS, cioè un DataBase Managment System, capace quindi di accedere alle
tabelle, effettuare ricerche, aggiungere e cancellare dati, controllare gli accessi in ambiente
multiutente, evitare scritture contemporanee etc. Una gran faticaccia! Eppure MySQL ci riesce
meglio di tanti suoi colleghi che godono di licenza commerciale. Grazie alla distribuzione
Win32, stabile quanto quella Linux, la sua diffusione ed il suo utilizzo da parte degli
sviluppatori è aumentata notevolmente.
Nei paragrafi che seguono illustreremo come installare e configurare MySQL per i nostri script
di esempio e faremo una panoramica delle operazioni principali che si possono effettuare
tramite il linguaggio SQL.

Installiamo MySQL.
Installare MySQL in ambiente Windows è praticamente un gioco da ragazzi. Basta scaricare dal
sito www.mysql.com i binari Win32 della versione corrente di MySQL.
Una volta installato MySQL, è possibile avviare il server direttamente con il tool
WinMySQLAdmin, in cui è possibile editare direttamente anche il file my.ini. Tipicamente, non
bisogna far alcuna operazione particolare, basta avviare il server e creare un database di
lavoro direttamente tramite il tool grafico cliccando sulla scehda database . Cliccando col tasto
destro nella finestrella di sinistra, appare un menu contestuale a comparsa in cui bisogna
scegliere la voce Create Database.

              Domenico Nappo – Domenico Surace - Manuali.Net © Tutti i diritti riservati
Lezione 15 Lavorare con MySQL Parte Prima.

Questo programmino però non permette la creazione di Tabelle o altro come succede in
programmi di database non Enterprise come Access. Esiste però un programma davvero ben
fatto ed utilissimo che consiglio di scaricare immediatamente e che si chiama MySQL-Front
scaricabile gratuitamente da www.mysqlfront.de .
Altro software principe per l’ interfacciamento amichevole con il modulo di amministrazione
MySQL è sviluppato proprio in PHP : PHPMyAdmin. Tutti i servizi di hosting che supportano sia
PHP che MySQL hanno una versione installata del programma, con cui gli utenti (e cioè i
programmatori PHP/MySQL) possono creare tabelle, cancellarle, aggiungere records, creare
indici etc. etc.
Consiglio però di effettuare le prime operazioni tramite la shell di MySQL : aprite una finestra
windows, dopo aver avviato il server MySQL, ed andate nella directory bin di MySQL. Avviate il
programma mysql. Questo programma è il client che si collega direttamente al server mysql in
esecuzione.
Se avete impostato una password con MySQL o volete collegarvi come un utente non root
(bisogna prima creare gli utenti…lo vedremo più avanti), bisogna digitare il comando seguente:

C:\mysql\bin>mysql –u utente -p

Dopo aver premuto invio e immesso la password, appare il prompt dei comandi mysql :

mysql>

Qui possiamo immettere tutti i comandi SQL.
SQL (Structured Query Language) è uno standard di linguaggio utilizzato da quasi tutti i
software DBMS in circolazione (compreso Access). Come tutti gli standard, esso non viene
rispettato fino i fondo ed ogni DBMS utilizza un proprio dialetto SQL.

Per creare le proprie tabelle, consiglio di scrivere un file di testo con estensione .sql,
contenente i comandi SQL per la creazione delle tabelle e la popolazione della stessa.
Per eseguire tale file SQL procedete nel seguente modo (più avanti vedremo un esempio di tale
file, dopo aver spiegato i principali comandi SQL) :
Al prompt di mysql digitate i seguenti comandi

mysql> \u database
mysql> \. script.sql

La prima istruzione seleziona un database creato precedentemente; la seconda serve per
eseguire il file script.sql, che deve essere salvato nella directory bin di MySQL.

Istruzioni SQL
Oltre all’
         istruzione create database per creare un database, esistono numerose funzioni per la
definizione della struttura dei nostri database. Dopo aver progettato le tabelle del database (su
carta) bisogna realizzarle effettivamente. Di seguito mostreremo la serie di istruzioni che
servono per definire una tabella con tutti i suoi campi.

CREATE TABLE TblClienti (
     Id         INT(4) NOT NULL PRIMARY KEY,
     Cognome    VARCHAR(50),
     Nome       VARCHAR(50),
     Email      VARCHAR(50) DEFAULT ‘mail@mail.it’,

              Domenico Nappo – Domenico Surace - Manuali.Net © Tutti i diritti riservati
Istruzioni SQL

       Note          TEXT
);

Queste istruzioni possono essere scritte direttamente da shell mysql oppure immesse in un file
sql da eseguire successivamente.Consiglio fortemente la seconda soluzione.
Dopo l’ istruzione create table, si prosegue con la lista dei campi, definendo il loro tipo (INT,
CHAR, VARCHAR,BLOB, TEXT etc.), la loro dimensione massima ed aggiungendo alcune
opzioni. Ad esempio, NOT NULL indica che il campo non può essere vuoto; PRIMARY KEY
assegna il ruolo di chiave primaria a quel campo, e quindi non ci possono essere duplicazioni in
quella colonna e le ricerche effettuate tramite tale campo sono velocizzate dalla creazione di
indici; DEFAULT valore assegna un valore di default nel caso il campo non risulta riempito
(serve ad esempio quando l’   applicazione non prevede la gestione di valori NULL e tuttavia si
vuole lasciar libero l’
                      utente di non riempire il campo apposito).

Per modificare e aggiungere una colonna si procede nel seguente modo:

ALTER TABLE TblClienti CHANGE Cognome Cognome VARCHAR(45);

ALTER TABLE TblClienti ADD Telefono VARCHAR(40);

Se si vuole eliminare un campo basta sostiruire nell’
                                                    istruzione precedente ADD con DROP.

Per inserire dei valori di prova nella tabella :

INSERT INTO TblClienti VALUES(1,”Rossi”,”Mario”,”mrossi@tin.it”,”Cliente di Test 1”);
 Etc. etc.

A questo punto, possiamo visualizzare il contenuto completo del nostro file sql da eseguire via
shell mysql :

DROP TABLE IF EXISTS TblClienti;

##l'istruzione precedente serve per
##eliminare la tabella se creata
##precedentemente, così da evitare
##un errore di duplicazione tabella

CREATE TABLE TblClienti (
     Id         INT(4) NOT NULL PRIMARY KEY,
     Cognome    VARCHAR(50),
     Nome       VARCHAR(50),
     Email           VARCHAR(50) DEFAULT 'mail@mail.it',
     Note       TEXT
);

##inserimento records di prova
INSERT INTO TblClienti VALUES(1,"Rossi","Mario","mrossi@tin.it","Cliente
1");
INSERT INTO TblClienti VALUES(2,"Bianchi","Ugo","bianchi@tin.it","Cliente
2");
INSERT INTO TblClienti VALUES(3,"Verdi","Fabio","fverd@tin.it","Cliente
3");
INSERT INTO TblClienti VALUES(4,"Neri","Max","max@tin.it","Cliente 4");
INSERT INTO TblClienti VALUES(5,"Gialli","Joy","joy@tin.it","Cliente 5");

              Domenico Nappo – Domenico Surace - Manuali.Net © Tutti i diritti riservati
Lezione 15 Lavorare con MySQL Parte Prima.

Eseguendo tale file tramite l’ istruzione \. file.sql (dopo aver selezionato il database tramite
l’
 istruzione \u database), si ottiene la seguente risposta da parte di mysql :

D:\mysql\bin>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12 to server version: 3.23.26-beta

Type 'help;' or '\h' for help. Type '\c' to clear the buffer

mysql> \u corso
Database changed
mysql> \. test_corso.sql
Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.17 sec)

Query OK, 1 row affected (0.16 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.05 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

mysql>

I n t e r r o g a z i o n i a l d a t a b a se

Le istruzioni per effettuare un’
                               interrogazione ad un database sono le più importanti ed in realtà
si riducono ad una singola istruzione : SELECT .

Tale istruzione restituisce i dati contenuti nel database in base ai criteri di ricerca specificati.
MySQL esegue tale istruzione più velocemente di qualsiasi altro DBMS.

SELECT campo1,campo2 FROM NomeTabella WHERE condizioni

Questo è il formato base di una query (interrogazione) ad un database, specificando delle
condizioni.

SELECT * FROM TblClienti WHERE id>3;

Questa istruzione preleva tutti i record (di ognuno preleva tutti i campi) dalla tabella TblCLienti
che hanno un numero di id superiore a 3.

SELECT Nome,Cognome FROM TblClienti WHERE id=3;

Seleziona il record che ha id pari a 3. Di tale record, preleva soltanto i campi Nome e
Cognome. Ecco i dati restituiti da MySQL, così come appaiono a video :

                            Domenico Nappo – Domenico Surace - Manuali.Net © Tutti i diritti riservati
Gestione Utenti in MySQL

mysql> SELECT Nome,Cognome FROM TblClienti WHERE id=3;
+-------+---------+
| Nome | Cognome |
+-------+---------+
| Fabio | Verdi |
+-------+---------+
1 row in set (0.16 sec)

mysql>

E’possibile specificare numerosi criteri di selezione nella clausola WHERE. Per una completa
trattazione si rimanda ad un manuale specifico di MySQL. In ogni caso, durante le successive
lezioni saanno mostrate numerose query effettuate tramite PHP, in cui è possibile apprendere
più in dettaglio tutte le potenzialità di questo DBMS e di SQL.

La clausola WHERE è utile anche per modificare i record che corrispondono ad una determinate
chiave di ricerca, tramite l’
                            istruzione UPDATE :

UPDATE NomeTabella SET colonna1=valore1,colonna2=valore2 WHERE condizioni;

Ad esempio:

UPDATE TblClienti SET email=”not valid” WHERE id update TblClienti SET email="non valido" WHERE id

No t a u t ile

Personalmente, per memorizzare i valori di TIMESTAMP in una tabella MySQL non utilizzo il
campo apposito di MySQL o le funzioni supportate per questo tipo di dato, ma più
semplicemente predispongo un campo di tipo TIN(11) che conterrà il TIMESTAMP generato da
PHP, per evitare problemi per le versioni Win32 di MySQL e per una gestione omogenea delle
date.

Gestione Utenti in MySQL
Per la gestione degli utenti e dei permessi, MySQL utilizza delle tabelle (che non devono
assolutamente essere modificate!) contenute nel database mysql e che sono user, db,
columns_priv e tables_priv.
Supponiamo di essere un fornitore di hosting e di dover aggiungere un database ed un utente,
che potrà collegarsi al suo db tramite PHPMyAdmin.
Prima di tutto, aggiungiamo un nuovo db nella tabella db del database mysql (per selezionare
il database mysql scrivere prima \u mysql) :

INSERT INTO db (Host,db) VALUES(‘localhost’,’nuovodb’);

                 Domenico Nappo – Domenico Surace - Manuali.Net © Tutti i diritti riservati
Lezione 15 Lavorare con MySQL Parte Prima.

Notare che bisogna esplicitare i campi che vogliamo riempire (in questo caso soltanto Host e
db) se non vogliamo riempire tutti i campi. Infatti, gli altri campi, e le altre tabelle che si
occupano della gestione degli utenti, verranno riempiti tramite il comando GRANT.

Per aggiungere un utente e specificare i permessi che si vogliono accordare ad esso, basta
eseguire la seguente istruzione dalla shell mysql :

GRANT ALL ON nuovodb.* TO nuovoutente@localhost IDENTIFIED by “pippo”

Con tale istruzione, si dice a MySQL di aggiungere un utente chiamato nuovoutente,
identificato dalla password pippo, e di accordargli tutti i privilegi (ALL) al suo database creato
precedentemente e cioè nuovodb. Si comunica anche che l’        utente può collegarsi al database
soltanto da localhost. Questo non significa che un utente può collegarsi al server MySQL
soltanto se sta fisicamente davanti al monitor del Server situato in Svizzera, con il fiato sul
collo del sysadmin. In pratica, l’
                                 accesso a MySQL avviene tramite le applicazioni in esecuzione
sul server, come appunto l’  interprete PHP. Non è possibile collegarsi direttamente al server
MySQL ma bisogna passare per un’      applicazione che gira sulla stessa macchina su cui gira
MySQL. Questo è il massimo della sicurezza.

Se non si desidera assegnare tutti i privilegi all’
                                                  utente, invece di ALL si può scrivere SELECT o
DELETE oppure INSERT e così via (si rimanda al manuale ufficiale di mysql).
Inoltre, se i privilegi vogliono essere assegnati per una particolare tabella, bisogna scrivere
nomedb.nometabella anziché nomedb.*. Ancora, se si vuole che l’      utente possa connettersi al
suo db da qualsiasi host o da un host particolare, basta scrivere nuovoutente@* (tutti gli host)
o nuovoutente@sub.dominio.it.

? 2002 By Domenico Nappo, Domenico Surace e Manuali.net
L’autore declina ogni responsabilità per eventuali (quanto improbabili) danni recati al sistema
per l’
     uso degli script di esempio riportati in questa guida.

              Domenico Nappo – Domenico Surace - Manuali.Net © Tutti i diritti riservati
Puoi anche leggere