Sunteți pe pagina 1din 23

Tutorial MySQL Tutorial MySQL 2005 by hwcore@linuxmail.

org

Cuprins 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Cuvant inainte Pornirea server-ului MySQL Pornirea client-ului MySQL Afisarea ba zelor de date Selectarea bazei de date curente Creearea bazei de date Creearea t abelelor Creearea campurilor Afisarea proprietatilor tabelului Afisarea intraril or dintr-un tabel Adaugarea datelor Afisarea conditionata a rezultatelor Sortare a intrarilor din campuri Modificarea structurii unui tabel Stergerea campurilor Modificarea numelui tabelului Actualizarea valorilor Stergerea tabelului si a ba zei de date Incheiere

1. Cuvant inainte Bine ati (re)venit la cel de-al patrulea (4) tutorial. Pentru cei ce citesc pentru prima data un tutorial scris de mine enumar celelalte trei (3) tutoriale de pana acum respectiv Administrare si configurare Slackware linux, S ubtitrare DVD si Configurarea retelei Windows 9x/Me/NT/2000/XP. Tutorialele mention ate mai sus vin de asemenea in format PDF si au fost editate sub suita Office, O penOffice.org. Sper ca cei ce mi-au citit celelalte trei tutoriale sa fi fost mu ltumiti de munca ce am depus-o intru conceperea lor. De asemenea sper sa le fi f ost si utile si sa le fi usurat munca si sa-i fi scutit de bataile de cap ce leam avut si eu la randul meu...la vremea aceea :) De ce m-am ambitionat sa scriu tutorialele ? Pentru a deveni faimos in lumea IT garantez ca nu. Nu, acesta nu a fost scopul ci le-am scris pentru a usura viata multora dintre voi asa cum si a mea a fost usurata de nenumarati autori de tutoriale sau carti de specialitate de la care am invatat cam tot ceea ce stiu eu si tin sa le multumesc (indirect c aci nu vor avea cum sa citeasca aceste randuri) pentru efortul depus. Si pentru ca nimeni nu s-a nascut invatat doresc sa ajut pe aceeia dintre voi care au nevo ie de ajutor in acest domeniu, cel al bazelor de date MySQL. De ce MySQL ? Nu po t sa va dau decat trei raspunsuri la aceasta intrebare, acestea fiind si motivel e pentru care eu si multi (foarte) multi utilizatori si companii utilizeaza MySQ L ca server de baze de date. Primul raspuns este: MySQL este oferit sub licenta GPL deci este gratuit. Al doilea raspuns: MySQL este suportat de catre PHP, ceea ce face utila si in acelasi timp usoara imbinarea acestor activitati in creeare a continutului Web dinamic. Al treilea raspuns: MySQL este usor de invatat si fo arte rapid spre deosebire de alternativele comerciale FoxPro sau Oracle. Bine-nteles ca fiecare sistem de baze de date are avantajele si dezavantajele sale insa MyS QL este special in sensul in care ofera aceeasi calitate si viteza, ba chiar une ori mai mare decat a sistemelor de baze de date comerciale. Sistemul de baze de date MySQL se bazeaza exclusiv pe SQL (Structured Query Language) si mSQL, MySQL fiind urmasul celui din urma, toate cele trei fiind opera aceluiasi consortiu dif erenta constand in gratuitatea celui din urma si bine-nteles si datorita multiti dinii de noi facilitati oferite de acesta. Server-ul si clientul MySQL este disp onibil (si) sub Windows si se poate descarca fie sub forma executabila fie sub f orma de cod sursa. Am zis si sub Windows deoarece MySQL si fratii lui mai mari a u fost la inceput implementati pe sisteme *nix. (Linux/Unix) urmand apoi sa fie portate si pe platforma Windows. Lasand la operte faptul ca sunt fan Linux pot s pune ca MySQL ruleaza mult mai rapid pe Linux decat pe Windows, deci, in cazul i n care va gazduiti pagina Web pe un server

ce suporta MySQL cautati unul care sa ruleze Linux ca sistem de operare. Experie nta si testele ce le-am efectuat releva faptul ca MySQL ruleaza si mai stabil pe Linux decat sub Windows. (indiferent ca a fost vorba deWindows 2000 Server sau Windows 2003 Server) Si ca sa nu o mai lungesc atat de mult, inainte de a incepe prorpriu-zis mai terbuie sa mentionez ca acest tutorial a fost coneput in ideea in care fiecare dintre cititori stie ceea ce este un sistem de baze de date fie el relational sau nu. Pentru ca majoritatea dintre cititori utilizeaza Windows ca sistem de operare, screenshot-urile din acest tutorial vor releva mediul MySQ L si comportamentul acestuia sub aceasta platforma. ATENIE: Continutul de fata n u constutuie o alternativa la un material de specialitate ! Pentru aceasta consu ltati documentatia MySQL sau o carte de specialitate. 2. Pornirea server-ului My SQL Modul in care pornim serverul MySQL este dependent de tipul de sistem de ope rare pe care-l rulam. Astfel, pentru un sistem de operare bazat pe kernel NT, se lanseaza apeland executabilul mysqld-nt, altfel doar prin mysqld (MySQL daemon). Ac este fisiere excecutabile se afla in x:\mysql\bin\. Un sfat totusi, daca rulati fr ecvent MySQL va recomand sa creati un fisier batch cu care sa porniti automat se rver-ul MySQL la pornirea Windows-ului. Pentru cei ce nu stiu cum se realizeaza un fisier tip batch (cu extensia .bat), va voi explica in cele ce urmeaza: desch ideti MS-DOS prompt dand comanda cmd in meniul Run din bara de start Windows iesiti in radacina discului cu cd \ tastati urmatoarea linie copy con mysql.bat scrieti in fisier calea completa spre fisierul executabil mysqld-nt sau mysqld (ex: cd c:\mysql\ bin\ /mysqld-nt - / pe a doua linie) salvati modificarile apasand combinatia de t aste [CTRL]+Z creati un shortcut al acestui fisier in directorul StartUp (ex: de schideti meniul Start, dati click stanga pe Startup si selectati optiunea Explore du pa care mutati sau creati shurtcut-ul spre fisierul batch creeat anterior

3. Pornirea clientului MySQL Dupa ce ati pornit server-ul MySQL va trebui sa rulati clientul MySQL, aplicatia ce va ofera posibilitatea sa efectuati operatii asupra bazelor de date, respect iv consola de unde furnizati comenzi server-ului MySQL. Pentru a porni clientul MySQL, deschideti prompt-ul MS-DOS, intrati in directorul mysql\bin si tatstati mys ql pentru a porni consola MySQL. O imagine ca cea de mai sus va va aparea pe term inal-ul MS-DOS. In cazul in care server-ul MySQL nu este protejat printr-o parol a imaginea de mai sus va trebui sa reflecte rezultatul aparut pe monitorul vostr u. Daca administratorul sistemului v-a dat un username si o parola pentru conect area la MySQL atunci va trebui sa sfecificati acestea prin urmatoarele flag-uri: mysql -u utilizator -pparola Observati ca am alipit parola flag-ului -p (password), a ltfel parola inserata de voi nu va fi recunoscuta de catre MySQL. Daca totusi, n u aveti o parola stabilita insa vreti sa va conectati la server-ul MySQL sub un alt nume de utilizator, folositi: mysql -u utilizator Imaginea de mai jos arata mo dul in care au fost date directivele MySQL:

Ok, daca totul a decurs conform planului vom incepe prin a da comenzi serverului MySQL. Pentru inceput vom afisa bazele de date continute de MySQL dand comanda: 4. Afisarea bazelor de date show databases; Observati ; din exeplul de mai sus. Ele reprezinta terminatorul de comanda MySQL si arata server-ului unde se termina o comanda pentru ca in MySQL comanzile se pot intinde pe mai multe randuri. In ca zul in care aveti o comanda foarte lunga, pentru a fi mai usor viziblila si in a celasi timp lizibila, dati comanzile MySQL si plasati ; doar la sfarsitul declarat iilor. In caz contrat MySQL va afisa >, ceea ce inseamna ca server-ul MySQL asteap ta o comanda, respectiv comanda data nu este completa, deci nu are terminatorul necesar. Comanda show databases; va afisa rezultatele sub forma de tabel (1 coloan a x n linii). Rezultatul acestei comenzi reflecta numele bazelor de date prezent e in MySQL. Pentru a opera/interactiona cu o anumita baza de date, aceasta va tr ebui selectata dupa cum urmeaza:

5. Selectarea bazei de date use baza_date Declaratia de mai sus nu se termina in ; d eoarece este o directiva MySQL si nu o comanda pe o baza de date. Dupa selectare a bazei de date asupra caruia vom interactiona putem da directive de operare pe baza de date in cauza. Inainte de aceasta va trebui sa reamintesc celor ce au ui tat si sa le mentionez celor ce nu stiu ca o baza de date este formata din: nume le bazei de date tabele intrati/campuri in baza de date (inregistrari, acestea f iind stocate ordonat in randuri si coloane) De retinut ca o baza de date poate c ontine mai multe tabele ce pot contine multe intrari/campuri. Acest tip de organ izare face dintr-o baza de date un sistem ordonat si efcient, mai ales in cazul in care baza de date contine foarte multe informatii. Pentru a intelege mai bine topologia unei sistem de baze de date sa facel analogia cu un arbore: radacina este numele bazei de date care va contine: crengile reprezinta tabelele frunzele de pe crengi, intrarile/informatiile din baza de date Desigur, acest exemplu es te intr-un fel abstract din moment ce am uitat sa mentionez ce rol indeplineste tulpina insa va las pe voi sa-l atribuiti unei entitati. MySQL, ca si orice alt sistem de baze de date opereaza cu tipuri de date, le recunoaste, face distincti e intre ele si opereaza cu ele in functie de tipul lor. Ca sa dau un exemplu sim plu, o baza de date va contine campuri ce vor stoca un anumit tip de date. Astfe l un camp stocheaza date tip caracter, altul stocheaza date tip intreg, altul in format data, etc. MySQL face distinctie intre aceste tipuri de date si in funct ie (si) de atributele fecarui tip de date (stabilit de noi) opereaza cu acestea. Atributele exista in functie de tipul de date asupra caruia operam. Pentru a fi mai specific, un atribut al unui camp poate fi: dimensiunea tipului, flag-ul ZE RO sau NON-ZERO (NULL/NOT NULL), incrementare sau decrementare (fata de n-1/n+1) , valoare implicita, etc. Mai multe despre aceste atribute voi vorbi pe parcursu l acestui tutorial, la momentul potrivit. Dar sa luam un simplu exemplu MySQL as upra caruia vom opera. Vom creea o baza de date ce sa stocheze data referitoare la alimentele consumate in ultima luna. Baza de date o vom denumi raport_nutritio nal, in care vom creea un tabel

cu numele alimente. Campurile din acest tabel le vom denumi Nume, Cantitate si Date. fel, in ansamblu, baza noastra de date va arata ca mai jos: raport_nutritional * alimente Nume Cantitate Date Dupa cum am mai mentionat, topologia unei baze de date se bazeaza pe stocarea en titatilor/datelor pe randuri si coloane, campurile tabelului fiind reprezentate aliniate in coloane iar datele stocate in fiecare camp in parte in randuri, un r and pentru fiecare coloana, in functie de numarul de intrari din baza de date. O k, dar ce tip sa aiba datele stocate in campurile mentionate ? Acesta il definim in functie de ce date vor fi stocate in tabel. In cazul de fata vom avea urmato arele tipuri de date pentru campurile noastre: > Nume [CHAR/VARCHAR] > Cantitate [TINYINT/INT] > Date [DATE] Desigur, pentru fiecare tip de date ales putem stab ili parametrii suplimentare (uneori sunt chiar necesari), ca valoarea implicita (default value), flag-ul NULL/NOT NULL sau UNSIGNED/SIGNED. Bine-nteles, exista o multitudine de tipuri de date suportate de MySQL insa deocamdata le-am enumera t pe cele in discutie. Asadar, ce reprezinta tipurile de date alese de noi pentr u campurile din tabel ? Campul #1, Nume va stoca date tip caracter (dupa cum suger eaza si numele campului). Utilizam CHAR in cazul in care avem caractere si VARCH AR in cazul in care utilizam siruri de caractere. Campul #2, Cantitate va stoca da te tip intreg, INT, respectiv TINYINT pentru date intreg ce nu ocupa un spatiu d e memorie foarte mare. Pentru exemplul nostru, vom utiliza TINYINT intrucat vom avea valori mici. Pentru tipuri de date de tip numeric ca (TINY)INT va trebui sa stabilim flag-ul NULL/NOT NULL. (zero/non-zero) Daca optam pentru NOT NULL va t rebui sa adaugam si o valoare pentru flag-ul default value (valoare implicita). Ca mpul #3, Data va reprezenta date tip data, iar MySQL va intrepreta acest tip de da te in format american anan-ll-zz. Acum ca am terminat cu teoria, sa trecem la part ea practica. Va trebui sa creeam o baza de date cu numele ales mai sus:

6. Creearea bazelor de date create database raport_nutritional; Urmatorul pas ne cesar este selctarea bazei de date cu care vrem sa operam, in cazul nostru chiar cu cea creeata mai sus: use raport_nutritional Caracterul ; este optional intruca t este o directiva MySQL. Vom creea apoi tabelul alimente cu numele campurilor, ti purile de date si optional flag-urile de rigoare: 7. Creearea primului tabel cre ate table alimente(Nume CHAR(20), Cantitate TINYINT(3) NOT NULL Default 0, Data DATE); Pentru a observa rezultatul interogarii, priviti imaginea de mai jos: Daca rezultatul de pe monitorul dvs. MySQL arata ca cel de mai sus atunci felicit ari, aveti o baza de date si-un tabel insa tabelul este gol ! Sa introducem catev a date in el:

8. Adaugarea campurilor in tabel insert into alimente(Nume, Cantitate,Data) valu es(Paine,3,1984-1123); Desigur, daca nu dorim sa introducem in tabel decat intrarea Paine si Cantitate si n u si Date, atunci query-ul nostru ar arata astfel: insert into alimente(Nume, Cant itate) values(Paine,3); Acum ca ati creeat baza de date, ati creeat un tabel, campur ile acestuia si ati introdus si cateva date in acesta, sa operam asupra ei/lui. Pentru ca suntem curiosi sa vedem ce contine baza de date nou creeata vom inerog a baza de date si vom cere sa afiseze tabelele si sa descrie proprietatile campu rilor definite de noi anterior. Afisam tabelele din baza de date curenta astfel: show tables; Afisam proprietatile campurilor dintr-un tabel astfel: 9. Afisarea proprietatilor unui tabel describe alimente;

,unde alimente reprezinta numele tabelului din baza noastra de date Observati mai sus dimensiunea campului Cantitate. Aceasta valoare reprezinta numar ul maxim de octeti pe care-l pot avea datele din acest camp. Astfel, nu putem av ea valori mai mari de 999 - altfel ar fi trebui sa specificam o dimensiune de 4 oc teti pentru o valoare de pana la 9999. Flag-urile NULL au fost stabilite implicit de MySQL pentru noi pentru ca n-am specificat o alta valoare. Oricum acest lucru nu ne va deranja atata timp cat in momentul in care de abia am creeat tabelul n u vom avea date in el. Pana acum am efectuat urmatoarele operatii: am selectat b aza de date, am afisat tabelele din aceasta, am descris proprietatile acestora i nsa nu am afisat continutul lor (lui). Pentru aceasta utilizam:

10. Afisarea intrarilor intr-un tabel SELECT * FROM alimente; Deci, ce face sintaxa de mai sus ? Simplu, afiseaza elementele dorite dintr-un t abel in functie de conditiile puse de noi. In cazul de mai sus am optat in a afi sa toate datele dintr-un tabel (prin caracterul wildcard *) insa daca tabelul nost ru contine foarte multe intrari, rezultatul unei astfel de interoari ar fi foart e greu de citit si urmarit. In cele ce urmeaza o sa mai introducem cateva intrar i ca mai tarziu sa avem pe ce criterii filtra rezultatele noastre. 11. Adaugarea datelor in campuri INSERT INTO alimente(Nume,Cantitate,Date) VALUES (Ciocolata,0,200 4-01-20); INSERT INTO alimente(Nume,Cantitate,Date) VALUES (Lapte,10,2003-05-26); 12. fisarea conditionata a intrarilor Intai vom afisa toate datele din tabel pentru a vedea diferenta dupa o filtrare prealabila:

SELECT * FROM alimente; Acum ca avem mai multe intrari cu diferite valori sa filtram rezultatul afisarii dupa cum urmeaza: SELECT nume, cantitate FROM alimente WHERE Cantitate>5; Ceea ce face aceasta comanda este sa afiseze campurile nume si cantitate din tabelul alimente cu unde cantitatea este mai mare decat 5.

In felul acesta putem pune mai multe conditii in afisarea rezultatelor. De exemp lu putem afisa doar numele a caror cantitate este 0. Pentru aceasta vom adauga i n tabelul nostru doua intrari Alcool si Citrice. INSERT INTO alimente(Nume,Date) val ues(Alcool,2004-01-12); INSERT INTO alimente(Nume,Date) values(Citrice,2004-01-12); A vom afisa cum am mai spus doar intrarile a caror cantitate este 0. SELECT nume FROM alimente WHERE cantitate=NULL; Rezultatul dorit a fost afisat, respectiv s-au afisat doar intrarile a caror can titate este 0. Acum ca tot avem cateva intrari ce contin diferite valori tip int reg, sa le sortam dupa un anumit criteriu. Sa presupunem ca dorim sa afisam intr arile din campurile Nume si Cantitate insa dorim sa afisam cantitatea in ordine cres catoare. Pentru sortarea unor entitati utilizam cuvintele cheie ORDER BY (ordone aza dupa [criteriu]). Optional putem specifica modul in care se face ordonarea a dica in mod crescator sau descrescator. Aceasta o specificam prin cuvintele chei e ASC (crescator) si DESC (descrescator). Important de tinut minte este ca acest e ultime chei se adauga dupa criteriul de afisare al rezultatului, respectiv al ordonarii datelor.

13. Sortarea intrarilor din campuri SELECT nume,cantitate FROM alimente ORDER BY cantitate ASC; Rezultatul va trebui sa arate ca cel de mai jos: Complicam putin exemplul urmator si afisam toate datele din tabel ce se contin l iterele co si a caror data o vom afosa-o crescator:

SELECT * FROM alimente WHERE nume LIKE "%co%" ORDER BY date ASC; Observati cuvan tul cheie LIKE. Acesta este folosit in filtrarea rezultatelor ce sa contina un a numit continut stabilit de utilizator. Caracterul % are aici functie de simbol wil dcard adica de inlocuire. Nu-l substituiti insa cu * deoarece nu va functiona in a cest caz. Cuprinzand un sir de caractere intre % indicam MySQL sa filtreze intrari le ce sa contina sirul de caractere specificat. Dar daca dorim sa afisam doar re zultatele ce sa inceapa sau sa se termine cu o anumita litera sau litere ? Pentr u aceasta trebuie doar sa plasam caracterul % in locul potrivit dupa cum urmeaza: SELECT nume FROM alimente WHERE nume LIKE c%; Invers, pentru a afisa intrarile a caror nume se termina in litera a vom utiliza: SELECT nume FROM alimente WHERE nume LIKE %a; Sper ca exemplele grafice ce vi le-a m pus la dispozitie v-au fost de ajutor. Nu, totorialul nu se termina aici ! In cele ce urmeaza vom edita putin continutul bazei de date, vom adauga cateva campur i in plus, vom schimba atributele unor campuri, vom actualiza valorile unor date , vom sterge unele campuri, vom redenumi tabelul, il vom sterge si spre final vo m sterge baza de date.

14. Modificarea structurii unui tabel Intai vom mai adauga un camp tabelului nos tru cu alimente. Il vom numi Comentariu si vom stoca in el date tip caracter, VARC HAR de dimensiune 255 octeti. ALTER TABLE alimente ADD Comentariu VARCHAR(256) N OT NULL AFTER Date; Asadar, o noua instructiune MySQL, ALTER TABLE modifica structura unui tabel. Pa rametrii utilizati in cazul de mai sus sunt ADD si AFTER. Parametrul ADD se util izeaza pentru a adauga un nou camp tabelului si AFTER este clauza pentru campul creeat. Aceasta se refera la pozitia noului camp creeat fata de ultimul camp din tabel. Pentru a specifica pozitia unui camp ca fiind prima din tabel vom utiliz a clauza FIRST. Ok, am creeat un nou camp insa ne razgandim asupra tipului de da te ce-l resprezinta campul nou creeat si vrem sa-i modificam atributul respectiv dimensiunea campului. In exemplul de mai jos dorim sa modificam dimensiunea la 20 octeti in loc de 255. ALTER TABLE alimente MODIFY Comentariu VARCHAR(20) NOT NULL; Atentie insa, datele stocate in acest camp (daca exista) ce depasesc noua dimensiune stabilita vor fi trunchiate ! In imaginile de mai jos voi arata rezul tatul initial si cel rezultat in urma operatiei

de modificare al atributului. Daca rezultatul vostru este asemanator (identic) a tunci felicitari ! In caz contrar verificati daca sintaxa utilizata este corecta si sa nu lipseasca caracterul ;, altfel MySQL va astepta terminarea comenzii. Ina inte: Dupa:

In cazul in care ati retinut procedeul de modificare voi trece mai departe, la s tergerea unui anumit camp din tabel. In caz contrar reveniti asupra exemplelor d e mai sus si ganditi-va la comenzile MySQL, ca se executa de la stanga la dreapt a, incep ca argument cu numele obiectului pe care dorim sa operam, eventuale pro prietati ale obiectului si eventualele clauze pentru operatiile efectuate. 15. S tergerea unui camp din tabel In exemplul de mai jos voi sterge campul Comentariu f ara a afecta insa integritatea tabelului. ALTER TABLE alimente DROP Comentariu; Argumentul DROP al comenzii ALTER TABLE indica stergerea unei entitati, in cazul nostru un camp. 16. Modificarea numelui unui tabel Sa presupunem ca dorim sa mo dificam numele tabelului nostru. Pentru acest lucru vom utiliza din nou comanda ALTER TABLE insa cu un alt parametru. Il vom redenumi din alimente in nutritie: ALTE R TABLE alimente RENAME nutritie;

Aveti grija insa la sintaxa acestei comenzi intrucat se modifica valoarea fara a se specifica valoarea precedenta ci numai cea noua. 17. Actualizarea unei intrari Dar daca dorim sa corectam o valoare introdusa ant erior intr-un camp ? Pana acum v-am exemplificat modul de modificare a structuri i unui tabel insa acum a venit timpul sa va explic cum se innoiesc (actualizeaza ) datale intr-o baza de date. Pentru a inlocui o valoare utilizam urmatoarea com anda: UPDATE nutritie SET cantitate=3 WHERE nume=Ciocolata; Observati argumentul ins tructiunii UPDATE, SET si conditiile in care se aplica aceasta instructiune resp ectiv numele articolului asupra caruia vrem sa operam precum si a valorii ce dor im sa i-o atribuim. Atentie, valoarea precedenta se pierde ! Va recomand sa va ju cati cu aceasta intructiune si sa experimentati si pe alte campuri caci astfel ca patati exercitiu, exercitiu=experienta...stiiti voi.

18. Stergerea tabelului si a bazei de date Spre final, vom sterge tabelul si baz a de date pe care am operat. DROP TABLE nutritie; DROP DATABASE raport_nutrition al; Instructiunea DROP se utilizeaza pentru a sterge o anumita entitate din structur a unui sistem de baze de date.

In exemplul de mai sus am utilizat ca si argument entitatea pe care o vom sterge precum si numele acesteia. 19. Incheiere Cu exemplul de mai sus inchei acest tu torial. Sper ca ceea ce-am explicat v-a fost de folos si pe intelesul tuturor. O ricum, retineti ca acest material este doar un tutorial si nu a fost conceput cu scopul de a inlocui un material de specialitate ! Pentru mai multe referinte la MySQL consultati o carte de specialitate, le gasiti in orice librarie ce se res pecta si este in principiu de dimensiuni apreciabile. Pentru intrebari, sugestii, critici scrieti-mi la hwcore@linuxmail.org