LAVORARE CON MYSQL PARTE PRIMA.
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
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