Sunteți pe pagina 1din 22

Tutorial

MySQL

Tutorial MySQL © 2005 by hwcore@linuxmail.org


Cuprins

1. Cuvant inainte
2. Pornirea server-ului MySQL
3. Pornirea client-ului MySQL
4. Afisarea bazelor de date
5. Selectarea bazei de date curente
6. Creearea bazei de date
7. Creearea tabelelor
8. Creearea campurilor
9. Afisarea proprietatilor tabelului
10. Afisarea intrarilor dintr-un tabel
11. Adaugarea datelor
12. Afisarea conditionata a rezultatelor
13. Sortarea intrarilor din campuri
14. Modificarea structurii unui tabel
15. Stergerea campurilor
16. Modificarea numelui tabelului
17. Actualizarea valorilor
18. Stergerea tabelului si a bazei de date
19. 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”, “Subtitrare DVD” si “Configurarea
retelei Windows 9x/Me/NT/2000/XP”.
Tutorialele mentionate mai sus vin de asemenea in format PDF si au fost editate sub
suita Office, OpenOffice.org.
Sper ca cei ce mi-au citit celelalte trei tutoriale sa fi fost multumiti de munca ce am
depus-o intru conceperea lor. 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...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
caci 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
nevoie de ajutor in acest domeniu, cel al bazelor de date MySQL.
De ce MySQL ?
Nu pot sa va dau decat trei raspunsuri la aceasta intrebare, acestea fiind si motivele
pentru care eu si multi (foarte) multi utilizatori si companii utilizeaza MySQL 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 creearea continutului Web dinamic.
Al treilea raspuns: MySQL este usor de invatat si foarte rapid spre deosebire de
alternativele comerciale “FoxPro” sau “Oracle”.
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, ba chiar uneori 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 diferenta constand in gratuitatea celui din urma si bine-nteles si
datorita multitidinii de noi facilitati oferite de acesta.
Server-ul si clientul MySQL este disponibil (si) sub Windows si se poate descarca fie
sub forma executabila fie sub forma de cod sursa.
Am zis si sub Windows deoarece MySQL si fratii lui mai mari au 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 spune ca MySQL ruleaza mult mai rapid
pe Linux decat pe Windows, deci, in cazul in care va gazduiti pagina Web pe un server
ce suporta MySQL cautati unul care sa ruleze Linux ca sistem de operare. 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, 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 MySQL si comportamentul acestuia
sub aceasta platforma.

ATENIE: Continutul de fata nu constutuie o alternativa la un material de specialitate !


Pentru aceasta consultati documentatia MySQL sau o carte de specialitate.

2. Pornirea server-ului MySQL

Modul in care pornim serverul MySQL este dependent de tipul de sistem de


operare 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).
Aceste fisiere excecutabile se afla in “x:\mysql\bin\”. Un sfat totusi, daca rulati
frecvent MySQL va recomand sa creati un fisier batch cu care sa porniti
automat server-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:
– 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.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 taste [CTRL]+Z
– creati un shortcut al acestui fisier in directorul StartUp (ex: deschideti meniul
Start, dati click stanga pe “Startup” si selectati optiunea “Explore” dupa 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, respectiv
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 “mysql” pentru a porni consola MySQL.
O imagine ca cea de mai sus va va aparea pe terminal-ul MS-DOS.
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.
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), altfel parola inserata


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

“use baza_date”

Declaratia de mai sus nu se termina in “;” deoarece este o directiva MySQL si nu


o comanda pe o baza de date.
Dupa selectarea 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 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, 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.
Acest tip de organizare 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 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.
MySQL, ca si orice alt sistem de baze de date opereaza cu tipuri de date, le
recunoaste, face distinctie intre ele si opereaza cu ele in functie de tipul lor.
Ca sa dau un exemplu simplu, o baza de date va contine campuri ce vor stoca un
anumit tip de date. Astfel 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 functie (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 ZERO
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
parcursul acestui tutorial, la momentul potrivit.
Dar sa luam un simplu exemplu MySQL asupra 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_nutritional”, in care vom creea un tabel
cu numele “alimente”. Campurile din acest tabel le vom denumi “Nume”,
“Cantitate” si “Date”.
Astfel, 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
entitatilor/datelor pe randuri si coloane, campurile tabelului fiind reprezentate
aliniate in coloane iar datele stocate in fiecare camp in parte in randuri, un rand
pentru fiecare coloana, in functie de numarul de intrari din baza de date.
Ok, 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 urmatoarele tipuri de date pentru campurile noastre:

> Nume [CHAR/VARCHAR]


> Cantitate [TINYINT/INT]
> Date [DATE]

Desigur, pentru fiecare tip de date ales putem stabili 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
enumerat pe cele in discutie.
Asadar, ce reprezinta tipurile de date alese de noi pentru campurile din tabel ?
➔ Campul #1, “Nume” va stoca date tip caracter (dupa cum sugereaza si numele
campului). Utilizam CHAR in cazul in care avem caractere si VARCHAR in
cazul in care utilizam siruri de caractere.
➔ Campul #2, “Cantitate” va stoca date tip intreg, INT, respectiv TINYINT
pentru date intreg ce nu ocupa un spatiu de 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 trebui sa adaugam si o valoare pentru flag-ul
“default value” (valoare implicita).
➔ Campul #3, “Data” va reprezenta date tip data, iar MySQL va intrepreta acest
tip de date in format american “anan-ll-zz”.
Acum ca am terminat cu teoria, sa trecem la partea 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 necesar 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 intrucat este o directiva MySQL.


Vom creea apoi tabelul “alimente” cu numele campurilor, tipurile de date si
optional flag-urile de rigoare:

7. Creearea primului tabel

create 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
“felicitari”, aveti o baza de date si-un tabel insa tabelul este gol !
Sa introducem cateva date in el:
8. Adaugarea campurilor in tabel

insert into alimente(Nume, Cantitate,Data) values(“Paine”,”3”,”1984-11-


23”);

Desigur, daca nu dorim sa introducem in tabel decat intrarea “Paine” si


“Cantitate” si nu si “Date”, atunci query-ul nostru ar arata astfel:

insert into alimente(Nume, Cantitate) values(“Paine”,”3”);

Acum ca ati creeat baza de date, ati creeat un tabel, campurile 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
ineroga baza de date si vom cere sa afiseze tabelele si sa descrie proprietatile
campurilor 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


numarul maxim de octeti pe care-l pot avea datele din acest camp. Astfel, nu
putem avea valori mai mari de “999” - altfel ar fi trebui sa specificam o
dimensiune de 4 octeti 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 nu vom avea date in el.
Pana acum am efectuat urmatoarele operatii: am selectat baza de date, am afisat
tabelele din aceasta, am descris proprietatile acestora insa 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 tabel in functie de conditiile puse de
noi.
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,
rezultatul unei astfel de interoari ar fi foarte greu de citit si urmarit.
In cele ce urmeaza o sa mai introducem cateva intrari 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”,”2004-01-20”);
INSERT INTO alimente(Nume,Cantitate,Date) VALUES
(“Lapte”,”10”,”2003-05-26”);

12. Afisarea 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
exemplu putem afisa doar numele a caror cantitate este 0. Pentru aceasta vom
adauga in tabelul nostru doua intrari “Alcool” si “Citrice”.

INSERT INTO alimente(Nume,Date) values(“Alcool”,”2004-01-12”);


INSERT INTO alimente(Nume,Date) values(“Citrice”,”2004-01-12”);

Acum 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 cantitate
este 0.
Acum ca tot avem cateva intrari ce contin diferite valori tip intreg, sa le sortam
dupa un anumit criteriu.
Sa presupunem ca dorim sa afisam intrarile din campurile “Nume” si
“Cantitate” insa dorim sa afisam cantitatea in ordine crescatoare.
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. Aceasta o specificam prin cuvintele cheie
ASC (crescator) si DESC (descrescator).
Important de tinut minte este ca aceste 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
literele “co” si a caror data o vom afosa-o crescator:
SELECT * FROM alimente WHERE nume LIKE "%co%" ORDER BY date
ASC;

Observati cuvantul cheie LIKE. Acesta este folosit in filtrarea rezultatelor ce sa


contina un anumit continut stabilit de utilizator.
Caracterul “%” are aici functie de simbol wildcard adica de inlocuire. Nu-l
substituiti insa cu “*” deoarece nu va functiona in acest caz.
Cuprinzand un sir de caractere intre “%” indicam MySQL sa filtreze intrarile ce
sa contina sirul de caractere specificat.
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%”;

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-am 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 campuri 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 vom sterge baza de date.
14. Modificarea structurii unui tabel

Intai vom mai adauga un camp tabelului nostru cu alimente. Il vom numi
“Comentariu” si vom stoca in el date tip caracter, VARCHAR de dimensiune
255 octeti.

ALTER TABLE alimente ADD Comentariu VARCHAR(256) NOT NULL


AFTER Date;

Asadar, o noua instructiune MySQL, ALTER TABLE modifica structura unui


tabel. Parametrii utilizati in cazul de mai sus sunt ADD si AFTER.
Parametrul ADD se utilizeaza 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 utiliza clauza
FIRST.
Ok, 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. 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 rezultatul initial si cel rezultat in urma operatiei
de modificare al atributului.
Daca rezultatul vostru este asemanator (identic) atunci felicitari !
In caz contrar verificati daca sintaxa utilizata este corecta si sa nu lipseasca
caracterul “;”, altfel MySQL va astepta terminarea comenzii.

Inainte:

Dupa:
In cazul in care ati retinut procedeul de modificare voi trece mai departe, la
stergerea unui anumit camp din tabel. In caz contrar reveniti asupra exemplelor
de mai sus si ganditi-va la comenzile MySQL, ca se executa de la stanga la
dreapta, incep ca argument cu numele obiectului pe care dorim sa operam,
eventuale proprietati ale obiectului si eventualele clauze pentru operatiile
efectuate.

15. Stergerea unui camp din tabel

In exemplul de mai jos voi sterge campul “Comentariu” fara 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 modificam 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”:

ALTER 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 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.
Pentru a inlocui o valoare utilizam urmatoarea comanda:

UPDATE nutritie SET cantitate=”3” WHERE nume=”Ciocolata”;

Observati argumentul instructiunii UPDATE, 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.
Atentie, valoarea precedenta se pierde !
Va recomand sa va “jucati” cu aceasta intructiune si sa experimentati si pe alte
campuri caci astfel capatati exercitiu, exercitiu=experienta...stiiti voi.
18. Stergerea tabelului si a bazei de date

Spre final, vom sterge tabelul si baza de date pe care am operat.

DROP TABLE nutritie;


DROP DATABASE raport_nutritional;

Instructiunea DROP se utilizeaza pentru a sterge o anumita entitate din


structura 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 tutorial.


Sper ca ceea ce-am explicat v-a fost de folos si pe intelesul tuturor.
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, le gasiti
in orice librarie ce se respecta si este in principiu de dimensiuni apreciabile.

Pentru intrebari, sugestii, critici scrieti-mi la hwcore@linuxmail.org