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 bazelor de date Selectarea bazei de date curente Creearea bazei de date Creearea tabelelor Creearea campurilor Afisarea proprietatilor tabelului Afisarea intrarilor dintr-un tabel Adaugarea datelor Afisarea conditionata a rezultatelor Sortarea intrarilor din campuri Modificarea structurii unui tabel Stergerea campurilor Modificarea numelui tabelului Actualizarea valorilor Stergerea tabelului si a bazei de date Incheiere

ceea ce face utila si in acelasi timp usoara imbinarea acestor activitati in creearea continutului Web dinamic. Primul raspuns este: MySQL este oferit sub licenta GPL deci este gratuit.. ba chiar uneori mai mare decat a sistemelor de baze de date comerciale.. 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 caci nu vor avea cum sa citeasca aceste randuri) pentru efortul depus. MySQL fiind urmasul celui din urma. Server-ul si clientul MySQL este disponibil (si) sub Windows si se poate descarca fie sub forma executabila fie sub forma de cod sursa. Cuvant inainte Bine ati (re)venit la cel de-al patrulea (4) tutorial. deci.la vremea aceea :) De ce m-am ambitionat sa scriu tutorialele ? Pentru a deveni faimos in lumea IT garantez ca nu.1. toate cele trei fiind “opera” aceluiasi consortiu diferenta constand in gratuitatea celui din urma si bine-nteles si datorita multitidinii de noi facilitati oferite de acesta. “Subtitrare DVD” si “Configurarea retelei Windows 9x/Me/NT/2000/XP”. acestea fiind si motivele pentru care eu si multi (foarte) multi utilizatori si companii utilizeaza MySQL ca server de baze de date.org. Sper ca cei ce mi-au citit celelalte trei tutoriale sa fi fost multumiti de munca ce am depus-o intru conceperea lor. Bine-nteles ca fiecare sistem de baze de date are avantajele si dezavantajele sale insa MySQL este special in sensul in care ofera aceeasi calitate si viteza. (Linux/Unix) urmand apoi sa fie portate si pe platforma Windows. cel al bazelor de date MySQL. 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”. Al treilea raspuns: MySQL este usor de invatat si foarte rapid spre deosebire de alternativele comerciale “FoxPro” sau “Oracle”. De ce MySQL ? Nu pot sa va dau decat trei raspunsuri la aceasta intrebare. Am zis si sub Windows deoarece MySQL si fratii lui mai mari au fost la inceput implementati pe sisteme *nix. Al doilea raspuns: MySQL este suportat de catre PHP. Nu. in cazul in care va gazduiti pagina Web pe un server . Sistemul de baze de date MySQL se bazeaza exclusiv pe SQL (Structured Query Language) si mSQL. Si pentru ca nimeni nu s-a nascut invatat doresc sa ajut pe aceeia dintre voi care au nevoie de ajutor in acest domeniu. Lasand la operte faptul ca sunt fan Linux pot spune ca MySQL ruleaza mult mai rapid pe Linux decat pe Windows. Tutorialele mentionate mai sus vin de asemenea in format PDF si au fost editate sub suita Office. OpenOffice. De asemenea sper sa le fi fost si utile si sa le fi usurat munca si sa-i fi scutit de bataile de cap ce le-am avut si eu la randul meu.

Experienta 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. se lanseaza apeland executabilul “mysqld-nt”. ATENIE: Continutul de fata nu constutuie o alternativa la un material de specialitate ! Pentru aceasta consultati documentatia MySQL sau o carte de specialitate.bat). Un sfat totusi. Aceste fisiere excecutabile se afla in “x:\mysql\bin\”.bat” – scrieti in fisier calea completa spre fisierul executabil “mysqld-nt” sau “mysqld” (ex: “cd c:\mysql\bin\ /mysqld-nt” . daca rulati frecvent MySQL va recomand sa creati un fisier batch cu care sa porniti automat server-ul MySQL la pornirea Windows-ului. pentru un sistem de operare bazat pe kernel NT. Pentru cei ce nu stiu cum se realizeaza un fisier tip batch (cu extensia . Pornirea server-ului MySQL Modul in care pornim serverul MySQL este dependent de tipul de sistem de operare pe care-l rulam.ce suporta MySQL cautati unul care sa ruleze Linux ca sistem de operare. Pentru ca majoritatea dintre cititori utilizeaza Windows ca sistem de operare. 2. dati click stanga pe “Startup” si selectati optiunea “Explore” dupa care mutati sau creati shurtcut-ul spre fisierul batch creeat anterior ./ pe a doua linie) – salvati modificarile apasand combinatia de taste [CTRL]+Z – creati un shortcut al acestui fisier in directorul StartUp (ex: deschideti meniul Start. screenshot-urile din acest tutorial vor releva mediul MySQL si comportamentul acestuia sub aceasta platforma. 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. Astfel. va voi explica in cele ce urmeaza: – deschideti 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. altfel doar prin “mysqld” (MySQL daemon).

Pornirea clientului MySQL Dupa ce ati pornit server-ul MySQL va trebui sa rulati clientul MySQL. folositi: “mysql -u utilizator” Imaginea de mai jos arata modul in care au fost date directivele MySQL: .3. aplicatia ce va ofera posibilitatea sa efectuati operatii asupra bazelor de date. nu aveti o parola stabilita insa vreti sa va conectati la server-ul MySQL sub un alt nume de utilizator. Daca administratorul sistemului v-a dat un username si o parola pentru conectarea 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). Daca totusi. altfel parola inserata de voi nu va fi recunoscuta de catre MySQL. O imagine ca cea de mai sus va va aparea pe terminal-ul MS-DOS. intrati in directorul “mysql\bin” si tatstati “mysql” pentru a porni consola MySQL. deschideti prompt-ul MS-DOS. Pentru a porni clientul MySQL. In cazul in care server-ul MySQL nu este protejat printr-o parola imaginea de mai sus va trebui sa reflecte rezultatul aparut pe monitorul vostru. respectiv consola de unde furnizati comenzi server-ului MySQL.

Pentru a opera/interactiona cu o anumita baza de date. dati comanzile MySQL si plasati “. ceea ce inseamna ca server-ul MySQL asteapta o comanda. Pentru inceput vom afisa bazele de date continute de MySQL dand comanda: 4. Comanda “show databases. aceasta va trebui selectata dupa cum urmeaza: .Ok. Afisarea bazelor de date “show databases. In caz contrat MySQL va afisa “>”. deci nu are terminatorul necesar.” doar la sfarsitul declaratiilor. Rezultatul acestei comenzi reflecta numele bazelor de date prezente in MySQL. respectiv comanda data nu este completa.” Observati “. daca totul a decurs conform planului vom incepe prin a da comenzi serverului MySQL.” 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 cazul in care aveti o comanda foarte lunga. pentru a fi mai usor viziblila si in acelasi timp lizibila.” va afisa rezultatele sub forma de tabel (1 coloana x n linii).

altul stocheaza date tip intreg. Mai multe despre aceste atribute voi vorbi pe parcursul acestui tutorial. Selectarea bazei de date “use baza_date” Declaratia de mai sus nu se termina in “. in care vom creea un tabel . etc. un atribut al unui camp poate fi: dimensiunea tipului. Astfel un camp stocheaza date tip caracter. MySQL. MySQL face distinctie intre aceste tipuri de date si in functie (si) de atributele fecarui tip de date (stabilit de noi) opereaza cu acestea. etc. acest exemplu este 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. valoare implicita. Vom creea o baza de date ce sa stocheze data referitoare la alimentele consumate in ultima luna. Ca sa dau un exemplu simplu. ca si orice alt sistem de baze de date opereaza cu tipuri de date. flag-ul ZERO sau NON-ZERO (NULL/NOT NULL). altul in format data. Dar sa luam un simplu exemplu MySQL asupra caruia vom opera. Inainte de aceasta va trebui sa reamintesc celor ce au uitat si sa le mentionez celor ce nu stiu ca o baza de date este formata din: – numele bazei de date – tabele – intrati/campuri in baza de date (inregistrari. 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. Baza de date o vom denumi “raport_nutritional”. o baza de date va contine campuri ce vor stoca un anumit tip de date. Acest tip de organizare face dintr-o baza de date un sistem ordonat si efcient. acestea fiind stocate ordonat in randuri si coloane) De retinut ca o baza de date poate contine mai multe tabele ce pot contine multe intrari/campuri. Atributele exista in functie de tipul de date asupra caruia operam. intrarile/informatiile din baza de date Desigur. Dupa selectarea bazei de date asupra caruia vom interactiona putem da directive de operare pe baza de date in cauza. Pentru a fi mai specific. face distinctie intre ele si opereaza cu ele in functie de tipul lor. incrementare sau decrementare (fata de n-1/n+1). le recunoaste. mai ales in cazul in care baza de date contine foarte multe informatii. la momentul potrivit.5.” deoarece este o directiva MySQL si nu o comanda pe o baza de date.

respectiv TINYINT pentru date intreg ce nu ocupa un spatiu de memorie foarte mare. iar MySQL va intrepreta acest tip de date in format american “anan-ll-zz”. “Nume” va stoca date tip caracter (dupa cum sugereaza si numele campului). in ansamblu. ce reprezinta tipurile de date alese de noi pentru campurile din tabel ? ➔ Campul #1. Va trebui sa creeam o baza de date cu numele ales mai sus: . flag-ul NULL/NOT NULL sau UNSIGNED/SIGNED. ca valoarea implicita (default value). dar ce tip sa aiba datele stocate in campurile mentionate ? Acesta il definim in functie de ce date vor fi stocate in tabel. Astfel. in functie de numarul de intrari din baza de date. Asadar. Bine-nteles. Ok. pentru fiecare tip de date ales putem stabili parametrii suplimentare (uneori sunt chiar necesari). Pentru exemplul nostru. baza noastra de date va arata ca mai jos: • raport_nutritional * alimente • Nume • Cantitate • Date Dupa cum am mai mentionat. Utilizam CHAR in cazul in care avem caractere si VARCHAR in cazul in care utilizam siruri de caractere. un rand pentru fiecare coloana. INT. 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 trebui sa adaugam si o valoare pentru flag-ul “default value” (valoare implicita).cu numele “alimente”. Campurile din acest tabel le vom denumi “Nume”. ➔ Campul #2. sa trecem la partea practica. “Cantitate” si “Date”. “Cantitate” va stoca date tip intreg. In cazul de fata vom avea urmatoarele tipuri de date pentru campurile noastre: > Nume [CHAR/VARCHAR] > Cantitate [TINYINT/INT] > Date [DATE] Desigur. topologia unei baze de date se bazeaza pe stocarea entitatilor/datelor pe randuri si coloane. Acum ca am terminat cu teoria. ➔ Campul #3. exista o multitudine de tipuri de date suportate de MySQL insa deocamdata le-am enumerat pe cele in discutie. “Data” va reprezenta date tip data. campurile tabelului fiind reprezentate aliniate in coloane iar datele stocate in fiecare camp in parte in randuri. vom utiliza TINYINT intrucat vom avea valori mici.

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

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

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

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

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

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

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

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

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

altfel MySQL va astepta terminarea comenzii. Daca rezultatul vostru este asemanator (identic) atunci felicitari ! In caz contrar verificati daca sintaxa utilizata este corecta si sa nu lipseasca caracterul “.de modificare al atributului. Inainte: Dupa: .”.

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

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

vom sterge tabelul si baza de date pe care am operat. Instructiunea DROP se utilizeaza pentru a sterge o anumita entitate din structura unui sistem de baze de date. .18. DROP TABLE nutritie. Stergerea tabelului si a bazei de date Spre final. DROP DATABASE raport_nutritional.

Pentru intrebari. Sper ca ceea ce-am explicat v-a fost de folos si pe intelesul tuturor. 19.In exemplul de mai sus am utilizat ca si argument entitatea pe care o vom sterge precum si numele acesteia. Incheiere Cu exemplul de mai sus inchei acest tutorial. critici scrieti-mi la hwcore@linuxmail. sugestii. le gasiti in orice librarie ce se respecta si este in principiu de dimensiuni apreciabile. Oricum. 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.org .

Sign up to vote on this title
UsefulNot useful