Sunteți pe pagina 1din 14

Programare Web

CUPRINS

CAP. II BAZE DE DATE RELAIONALE


MySQL...........................................................................2
2.1 Introducere ...............................................................................................2
2.2 Conectarea la MySQL ............................................................................3
2.3 Operaii MySQL .......................................................................................6
2.3.1 Crearea unei baze de date.....................................................................6
2.3.2 Crearea unei tabele...............................................................................7
2.3.3 Adugarea de date ntr-o tabel ...........................................................8
2.3.4 Vizualizarea datelor dintr-o tabel .......................................................9
2.3.5 Modificarea datelor dintr-o tabel......................................................12
2.3.6 tergerea datelor dintr-o tabel ..........................................................13

Programare Web

CAP. II BAZE DE DATE RELAIONALE


MySQL
2.1 Introducere
Un server de baze de date (n cazul de fa MySQL) este
un mediu software (un pachet de programe) care permite
stocarea unei cantiti mari de informaii ntr-un format
organizat (ntr-o structur organizat), uor de accesat prin
intermediul unor interfee grafice sau text de tip clientserver,
realizate cu ajutorul unor limbaje (de script, cum ar fi PHP,
Perl sau alte limbaje de nivel nalt gen C, C++, Delphi, etc).
Organizarea i administrarea informaiei n cadrul serverului
de baze de date este asigurat printr-un limbaj SQL, mai precis
un dialect SQL specific serverului de baze de date. Limbajul
SQL reprezint practic veriga intermediar ntre datele stocate
(informaia propriu-zis) i interfaa de aciune a clientului
(realizat ntr-un alt limbaj corespunztor). n situaia de fa,
att severul ct i limbajul specific acestuia poart numele
MySQL. O reprezentare grafic a unor posibile conexiuni
client-server MySQL este prezentat n figura 2.1.

Fig. 2.1 Conexiuni client-server MySQL


2

Programare Web

Setul de comenzi utilizate pentru a spune serverului


MySQL ce anume s fac este parte a limbajului Structured
Query Language (SQL), aceste comenzi mai purtnd numele
de interogri SQL (SQL queries). SQL este un limbaj standard
interacionnd cu majoritatea tipurilor de baze de date. Astfel,
la o trecere de la MySQL la InterBase (spre exemplu), se poate
observa c majoritatea comenzilor SQL sunt aproape identice
(numrul de clauze opionale i/sau caracteristicile acestora
putnd fi diferite).
Entitatea major de stocare a informaiei ntr-un server de
baze de date este baza de date (DATABASE). La rndul ei, o
baz de date conine una sau mai multe tabele, fiecare dintre
ele coninnd informaii ntr-un format tabelat (linii i
coloane). Astfel, o tabel (TABLE) conine una sau mai multe
coloane, denumite i cmpuri. Fiecare coloan poate stoca un
anumit tip de informaie. Fiecare linie din cadrul unei tabele
poart numele de articol sau nregistrare.
2.2 Conectarea la MySQL
Interfaa standard (inclus n mediul software), care
permite lucrul cu bazele de date MySQL (interaciunea direct
i gestionarea/administrarea), asigur conectarea la serverul de
baze de date MySQL i respectiv scrierea i executarea
succesiv (interpretarea) a cte unei singure comenzi SQL.
Software-ul MySQL conine, n principiu, un modul server i
respectiv un modul client.
Modulul client permite o conectare (inclusiv de la
distan) la serverul de baze de date. n momentul instalrii
unui server MySQL (pe o platform Windows sau Linux),
modulul client este automat instalat mpreun cu serverul. Pe o
platform Linux, programul de conectare poart numele
mysql (i este implicit instalat n directorul
/usr/local/mysql/bin). Pe o platform Windows, programul se
numete mysql.exe (i este implicit instalat n directorul
C:\mysql\bin).
n cazul n care serverul MySQL este instalat pe un host
Web (server Internet) la distan, deci pe un calculator care nu
este acelai cu calculatorul client (de pe care se ncearc
conectarea), cel mai simplu mod de conectare necesit
utilizarea unui program Telnet sau SSH (Secure Shell) pentru
login-area la serverul Web, urmat de lansarea n rulare a
programului mysql. Este cazul cel mai des ntlnit n situaia
3

Programare Web

n care MySQL-ul este instalat pe un server de Web, pe o


platforma Linux, iar clientul ncearc o conectare de pe o
platforma Windows. n situaia n care instalarea serverului
MySQL se face pe propriul calculator (de regul sub
Windows), acesta va conine att modulul sever ct i client.
Un alt caz este cel n care pe calculatorul client (propriul
computer) se instaleaz MySQL-ul (obinut free de la adresa
http://www.mysql.com), utilizat apoi pentru conectarea via
Internet la un sever MySQL.
Indiferent de metoda utilizat, conectarea clientului la
serverul MySQL implic o comand de genul (tastat la
prompter-ul sistemului de operare):
mysql h hostname u username p
unde:
- hostname este numele sau adresa IP a calculatorului
pe care ruleaz serverul MySQL. Dac programul client
ruleaz pe acelai calculator ca i programul server, optiunea
h hostname poate fi omis. Nu exist nici o legtur ntre
numele user-ului de conectare la serverul (Linux sau
Windows) pe care este instalat MySQL-ul i numele de user
MySQL.
- username este numele de user.
- opiunea p cere user-ului care se conecteaz s
introduc parola corespunztoare (va apare un prompt pentru
parol).
Dup instalare, un user implicit este creat pentru
conectare (pentru host-ul pe care este instalat serverul MySQL,
respectiv pentru un host-client la distan), fr nume i fr
parol. n acest caz conectarea (de pe host-ul local) se face
tastnd doar comanda mysql fr parametrii (sub Linux) sau
lansnd mysql.exe (sub Windows). Mai multe amnunte despre
conectarea la un server MySQL n paragraful care prezint
administrarea unui astfel de sever.
Observaie: Pentru MySQL 5.0.22 (inclus n pachetul
WAMP5), user-ul implicit existent la instalare este root, fr
parol.
n cazul unei conectri reuite, programul client MySQL
va afia prompter-ul corespunztor liniei de comand:
mysql>
La apariia liniei de comand, serverul MySQL este
pregtit pentru a primi comenzi. Pentru nceput, se
vizualizeaz bazele de date care sunt momentan sub gestiunea
severului:
4

Programare Web

mysql> SHOW DATABASES;


Observaie: ncheierea unei comenzi trebuie s se fac
neaprat prin ;. n cazul n care lipsete ;, i se tasteaz
ENTER, se consider c respectiva comand este scris pe mai
multe rnduri, ateptnd-se continuarea editrii comenzii, pn
la introducerea caracterului ;. Altfel spus, ENTER dup
caracterul ; nseamn executarea comenzii iar ENTER dup
orice alt caracter nsemn continuarea editrii comenzii pe o
noua linie. Spre exemplu, comanda anterioar poate fi scris
pe 3 linii astfel:
mysql>SHOW
->DATABASES
->;
Se recomand scrierea unei comenzi de lungime mare pe
mai multe linii. Execuia comenzii SHOW DATABASES are
urmtorul efect pe ecran:
+------------+
| Database
|
+------------+
| mysql
|
| test
|
+------------+
2 rows in set (0.00 sec)
Serverul MySQL-ul utilizeaz o prima baz de date,
numit mysql, pentru a stoca numele user-ilor, parolele
corespunztoare acestora i drepturile lor (n diverse tabele,
asupra crora se va reveni). tergerea acestei baze de date
(operaie nerecomandat) poate conduce la erori n
funcionarea server-ului.
A doua baz de date (test) este un exemplu de baz
creat implicit n urma instalrii fiind, dup cum i spune i
numele, o baz pentru testare. Aceast baz de date poate fi
tears oricnd, cu o comand de genul:
mysql> DROP DATABASE test;
n urma unei astfel de comenzi (tastnd ENTER), serverul
returneaz, ca i confirmare a executrii operaiei, mesajul:
QUERY OK. A se observa c nu se cere nc o confirmare a
inteniei de tergere, astfel nct este necesar a atenie
deosebit cu comenzile DROP DATABASE care pot distruge
informaii (tergnd irevocabil o baz de date).
5

Programare Web

n cazul n care, n timpul scrierii unei comenzi, se


constat c aceasta este greit sintactic sau va executa o
operaie nedorit, se poate renuna la ea prin postfaarea ei cu
irul \c, nainte de ncheierea ei prin ; , astfel revenindu-se la
o linie nou, pe care se poate scrie o alt comand.
Cu alte cuvinte irul \c conduce la abandonarea
execuiei comenzii curente, aceasta fiind ignorat. Spre
exemplu:
mysql> DROP DATABASE test \C
mysql>
Ieirea din programul client MySQL se face prin
comenzile quit sau exit. Acestea sunt singurele comenzi
care nu trebuie ncheiate prin punct-ivirgul ;.
mysql> quit
Bye

2.3 Operaii MySQL


2.3.1 Crearea unei baze de date
Primul pas la crearea unei aplicaii cu MySQL const n
crearea unei baze de date ca prim nivel ierarhic pentru stocarea
informaiei. Comanda pentru crearea unei baze de date cu
numele test, spre exemplu (presupunnd c nu exist deja
creat o baz cu un asemenea nume) este:
mysql> CREATE DATABASE test;
n acest moment, baza de date test este creat, dar
pentru a putea lucra cu ea trebuie deschis printr-o comand
prin care i se comunic serverului MySQL care este baza de
date activ n acel moment:
mysql> USE test;
Operaia imediat urmtoare crerii unei baze de date
(vide n acest moment) const n crearea unor tabele n aceasta.
Crearea unei baze de date conduce (din punct de vedere a
sistemului de operare) la crearea unui nou director. Dac se
dorete exportarea unei baze de date de pe un server MySQL
pe altul, este suficient copierea directorului respectiv,
mpreun cu tot coninutul lui. Crearea unei noi tabele implic
crearea a trei fiiere (cu acelai nume i alte extensii), plasate
evident n directorul corespunztor bazei curente.
6

Programare Web

2.3.2 Crearea unei tabele


n cele ce urmeaz, se va face o exemplificare pentru o
tabel cu o structur simpl, astfel c i comanda pentru
crearea acesteia constituie doar un caz particular. De reinut
totui c, deoarece tabelele sunt att de flexibile iar structura
unei baze de date poate fi att de elaborat, comanda pentru
crearea unei tabele poate fi extrem de complex. Sintaxa
principial a unei astfel de comenzi este de forma:
mysql>
->
->
->
->

CREATE TABLE table_name (


column_1_name column_1_type column_1_details,
column_2_name column_2_type column_2_details,
...
);

Pentru exemplificare, se va crea o tabel numit


TABEL1. Tabela este structurat pe trei coloane: NUME
(coninnd numele unei anumite persoane n format TEXT),
DATA (data naterii acelei persoane, ntr-un format DATE
corespunztor datei calendaristice) i un cmp special ID, care
permite o identificare unic pentru fiecare articol din tabel
(fiecrui articol i corespunde un ID distinct, reprezentat printrun numr ntreg INT).
Comanda pentru crearea acestei tabele este urmtoarea:
mysql> CREATE TABLE tabel1 (
-> ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> nume TEXT,
-> data DATE NOT NULL
-> );

Comentnd comanda anterioar, se pot remarca


urmtoarele:
prima linie precizeaz numele tabelei care va fi creat:
tabel1
linia a doua precizeaz numele ID al primei coloane din
tabel i tipul acesteia INT (adic va putea stoca doar numere
ntregi). Ceilali parametrii ai liniei precizeaz cteva detalii
speciale (constrngeri) referitoare la aceast coloan: NOT
NULL coloana nu poate s conin elementul NULL (adic
s nu conin nimic), AUTO_INCREMENT n momentul
adugrii unei noi nregistrri (linii) n tabel, coninutul
acestei coloane corespunztor noului articol va fi completat
automat de ctre server, fiind cea mai mare valoare din coloana
incrementat cu o unitate, i n sfrit, PRIMARY KEYvalorile din aceast coloan sunt unice pentru fiecare articol.
7

Programare Web

linia a 3-a definete o a doua coloan de tip TEXT avnd


numele nume
ultima linie definete a 3-a coloan cu numele data, de tip
DATA i care nu poate rmne necompletat (NOT NUL).
Observaie: MySQL nu este case-sensitive (se pot folosi att
caractere mari ct i mici, fr a se face distincie ntre ele),
excepie fcndu-se atunci cnd serverul MySQL lucreaz pe o
platform UNIX, caz n care numele de baze de date i tabele
corespund unor directoare i fiiere UNIX i trebuie inut cont
de modul exact cum sunt numite acestea (caractere mari sau
mici).
Execuia acestei comenzi este urmat de rspunsul
serverului Query OK, confirmnd crearea tabelei. Comanda
urmtoare listeaz tabelele din baza de date curent:
mysql> SHOW TABLES;
Evident, lista va conine o singur tabel:
+----------------+
| Tables_in_test |
+----------------+
| tabel1
|
+----------------+
1 row in set (0.00 sec)
O descriere a tabelei nou create se poate face cu
comanda:
mysql> DESCRIBE tabel1;
avnd ca rezultat afiarea unor informaii despre structura
tabelei:
+----------+---------+------+-----+------------+--------| Field
| Type
| Null | Key | Default
| Extra
+----------+---------+------+-----+------------+--------| ID
| int(11) |
| PRI | 0
| auto_inc
| nume
| text
| YES |
| NULL
|
| data
| date
|
|
| 0000-00-00 |
+----------+---------+------+-----+------------+--------3 rows in set

Dac se dorete tergerea unei tabele din baza de date


curent, comanda este:
mysql> DROP TABLE numele_tabelei;
2.3.3 Adugarea de date ntr-o tabel
Odat creat tabela, ceea ce mai rmne de fcut pentru
a o putea utiliza la ceva, const n stocarea unor informaii n
aceasta. Comanda pentru adugarea unui nou articol (o nou
linie) ntr-o tabel are dou forme. Sintaxele principiale ale
acestora sunt:
8

Programare Web

mysql>
->
->
respectiv
mysql>
->
->
->
->

INSERT INTO nume_tabela


( Nume_coloana1, Nume_coloana2, ...)
VALUES ( valoare1, valoare2, ...);
INSERT INTO nume_tabela SET
Nume_coloana1 = valoare1,
Nume_coloana2 = valoare2,
...
;

Spre exemplu, urmtoarele dou comenzi sunt echivalente:


mysql> INSERT INTO TABEL1 SET nume="DAN",
data="2002-05-27";
sau
mysql> INSERT INTO TABEL1 (nume,data) VALUES
("DAN","2002-05-27");
Inserarea datei curente se poate realiza utiliznd cuvntul
cheie CURRENT_DATE:
mysql> INSERT INTO TABEL1 (NUME,DATA)
-> VALUES ("IOAN", CURRENT_DATE);
2.3.4 Vizualizarea datelor dintr-o tabel
Comanda SELECT, utilizat pentru vizualizarea datelor
dintr-o tabel, este cea mai complex comand a limbajului
SQL. Motivul acestei complexiti rezid din nsi fora i
flexibilitatea unei baze de date de a stoca i prezenta datele.
Cea mai simpl sintax de utilizare a comenzii SELECT,
particularizat la exemplul considerat i pn acum, este:
mysql> SELECT * FROM tabel1;
avnd urmtorul rezultat:
+----+------+------------+
| ID | NUME | DATA
|
+----+------+------------+
| 1 | ION | 2002-04-25 |
| 2 | DAN | 2002-05-27 |
+----+------+------------+
2 rows in set (0.06 sec)
Comanda este echivalent cu (pentru tabela mai sus
referit):
mysql> SELECT id, nume, data FROM tabel1;
Sintaxa comenzii SELECT este mult mai complex. n
continuare vor fi prezentate doar cteva particularizri de
utilizare a acesteia.
9

Programare Web

Pentru afiarea datei calendaristice curente este utilizat


cuvntul cheie CURRENT_DATE. Astfel comanda:
mysql> SELECT CURRENT_DATE;
returneaz data curent:
+--------------+
| CURRENT_DATE |
+--------------+
| 2002-06-10
|
+--------------+
1 row in set (0.00 sec)
De asemenea, comanda:
mysql> SELECT YEAR(CURRENT_DATE);
returneaz anul corespunztor datei curente:
+--------------------+
| year(current_date) |
+--------------------+
|
2002 |
+--------------------+
1 row in set (0.00 sec)
Pentru a numra articolelor dintr-o tabel se utilizeaz funcia
COUNT. Astfel comanda:
mysql> SELECT COUNT(*) FROM tabel1;
va returna numrul total de articole din tabela referit:
+----------+
| count(*) |
+----------+
|
3 |
+----------+
1 row in set (0.55 sec)
Se pot impune condiii pentru numrarea articolelor care
ndeplinesc o anumit condiie:
mysql> SELECT COUNT(*) FROM TABEL1 WHERE
-> DATA>"2002-06-09";
va returna
+----------+
| COUNT(*) |
+----------+
10

Programare Web

|
1 |
+----------+
1 row in set (0.00 sec)
De asemenea se pot folosi i clauze suplimentare. Spre
exemplu, n comanda urmtoare, funcia LEFT va permite
afiarea unei coloane suplimentare obinut pe baza cmpului
(coloanei) nume, trunchiat la primele 2 caractere din stnga:
mysql> SELECT id, nume, LEFT(nume,2) FROM tabel1;
returnnd:
+----+------+--------------+
| id | nume | left(nume,2) |
+----+------+--------------+
| 1 | ION | IO
|
| 2 | DAN | DA
|
| 3 | IOAN | IO
|
+----+------+--------------+
3 rows in set (0.11 sec)
Utilizarea funciei LIKE i a caracterului special % (care
nlocuiete un ir de caractere oarecare) n comanda SELECT
are ca efect o interogare cu cutare aproximativ. Astfel
comanda:
mysql> SELECT nume FROM tabel1 WHERE nume
-> LIKE "%io%";
returneaz acele linii (nume) pentru care cmpul nume
conine irul io:
+------+
| nume |
+------+
| ION |
| IOAN |
+------+
2 rows in set (0.00 sec)
Evident c pot fi utilizate i condiii multiple, folosind
operatorii logici (AND n cazul de fa):
mysql> SELECT id, nume FROM tabel1 WHERE nume
-> LIKE "io%" AND data>"2002-04-02";
avnd ca rezultat:
+----+------+
| id | nume |
+----+------+
11

Programare Web

| 1 | ION |
| 3 | IOAN |
+----+------+
2 rows in set (0.00 sec)
2.3.5 Modificarea datelor dintr-o tabel
Odat datele introduse ntr-o tabel a bazei de date,
apare foarte des necesitatea de modificare a acestora (fie din
motive de corectare a unor eventuale greeli, fie pentru o
simpl i necesar reactualizare a acestora). Comanda
UPDATE, folosit pentru modificarea datelor dintr-o tabel,
are urmtoarea sintax general:
mysql> UPDATE table_name SET
-> col_name = new_value, ...
-> WHERE conditions;
Spre exemplu, dac se dorete modificarea datei
corespunztoare articolului cu id-ul 1 din tabela tabel1, se
scrie o comand de genul:
mysql> UPDATE tabel1 SET data="1999-06-02"
-> WHERE id=1;
Sau, dac se dorete o reactualizare a datei pentru toate
articolele al cror nume care ncep cu irul de caractere io:
mysql> UPDATE tabel1 SET data="1999-06-01"
-> WHERE nume LIKE "io%";
Efectul modificrii efectuate este prezent pe ecran sub forma
unui mesaj de confirmare:
Query OK, 2 rows affected (0.11 sec)
Rows matched: 2 Changed: 2 Warnings: 0
O situaie special a constituie modificarea/ncrcarea
unui cmp de tip BLOB (cu o imagine spre exemplu). Spre
exemplificare, o astfel de operaie utilizeaz funcia
LOAD_FILE( cale\\nume_fisier_sursa), i se poate face cu
o comand de genul:
mysql> UPDATE tabel3 SET
-> imag=LOAD_FILE("c:\\dan.jpg") WHERE id=3;
S-a folosit funcia LOAD_FILE pentru precizarea
fiierului surs care va fi ncrcat n tabel (evident, tabela
avnd un cmp imag de tip BLOB). De remarcat dublarea
caracterelor \ care apar calea spre fiierul surs (pentru o
platform Windows).
12

Programare Web

2.3.6 tergerea datelor dintr-o tabel


tergerea unei/unor nregistrri dintr-o tabel se poate face
extrem de simplu. Sintaxa comenzii este urmtoarea:
mysql> DELETE FROM table_name WHERE
-> conditons;
Spre exemplu, pentru a terge toate articolele pentru
care datele din cmpul nume ncep cu irul de caractere io
(nu se face distincie ntre caracterele mari i mici), se
folosete o comand de genul:
mysql> DELETE FROM tabel1 WHERE nume
-> LIKE "io%";
De remarcat c, pentru MySQL, clauza WHERE este
opional. Ne utilizarea acestei clauze trebuie fcut cu mare
precauie deoarece, n acest caz, efectul comenzii DELETE
este golirea tabelei (tergerea tuturor nregistrrilor din tabel).
Astfel, comanda urmtoare golete tabela tabel1:
mysql> DELETE FROM tabel1;
REZUMAT
Un server de baze de date (n cazul de fa MySQL) este un
mediu software care permite stocarea unei cantiti mari de
informaii ntr-un format organizat.
Conectarea clientului la serverul MySQL implic o comand
de genul:
mysql h hostname u username p
Vizualizarea bazelor de date care sunt momentan sub
gestiunea severului:
SHOW DATABASES;
Activarea unei baze de date:
USE numele_bazei:
Vizualizarea tabelelor unei baze de date active:
SHOW TABLES;
tergerea unei baze de date:
DROP DATABASE numele_bazei;
tergerea unei tabele:
DROP TABLE numele_tabelei;
Principalele operaii MySQL asupra datelor unei tabele sunt:
- crearea unei tabele
CREATE TABLE table_name (
13

Programare Web

column_1_name column_1_type
column_1_details,
column_2_name column_2_type
column_2_details,);
- adugarea ntr-o tabel:
INSERT INTO nume_tabela
(Nume_coloana1,Nume_coloana2,..)
VALUES (valoare1, valoare2,...);
sau
INSERT INTO nume_tabela SET
Nume_coloana1 = valoare1,Nume_coloana2 =
valoare2,...;
- vizualizarea datelor dintr-o tabel:
SELECT */lista_nume_cimpuri FROM tabela
[WHERE conditie];
- modificarea datelor dintr-o tabel:
UPDATE table_name SET col_name =
new_value, ...WHERE conditie;
- tergerea datelor dintr-o tabel:
DELETE FROM table_name [WHERE conditie];
NTREBRI
Care sunt cele 2 componente de baz ale MySQL-ului?
Scriei o secven de comenzi MySQL prin care s creai o
tabel cu 3 cmpuri. Tabela va fi populat cu trei nregistrri.
Modificai apoi ultima nregistrare i tergei nregistrarea a
doua. tergei n final tabela.
Care este comanda pentru tergere ntregului coninut al unei
tabele?

14

S-ar putea să vă placă și