Introducere in MySQL de George Nicolae Probabil ca daca cineva v-ar ruga sa ii realizati un magazin online, probabil
l-ati ruga sa va ofere date despre produsele sale iar voi ati incerca sa
realizati un design bun si sa gasiti o forma de a-i prezenta produsele. Cand e
vorba de 5-10 produse nu ar fi o problema asa mare. Dar daca se pune problema
unui numar de cateva 100 de produse? Ar trebui sa luati de pe servarul unde se
afla site-ul (asta daca nu aveti deja o copie a site-ului pe calculator), sa o
modificati si sa-l puneti din nou pe server. Probabil ca fiecare produs va avea
propria pagina cu descriere si probabil caracteristici. Va puteti inchipui ce
inseamana sa ti "up to date" un astfel de site. Sisif s-ar fi considerat
probabil norocos.
Si probabil acum veti intelege cat de puternica este o baza de date. Sa pornim
de la un caz practic. Vom incerca sa realizam un site de anunuturi online (ceva
mai simplu decat www.adserv.ro).
In mod normal cinva care trebuie sa dea un anunt, va va trimite un email cu
anuntul, voi veti modifica pagina html cu anunuturi si o veti pune pe server. Si
asta pentru fiecare anunt in parte. Lucrurile vor devenii destul de dificile
atunci cand veti avea de publicat cateva zeci de mesaje pe zi. Si cum va spuneam
mai devreme sau mai tarziu vom "esua" prin a folosi o baza da date.
Dar ce este pana la urma o baza de date? O baza de date (in cazul nostru MySQL)
este un program ce poate stoca o cantitate foarte mare de informatii si o poate
organiza intr-un format ce este usor accesibil in mod direct sau de catre un alt
program (in cazul nostru PHP).
O baza de date este formata din unul sau mai multe tabele. In cazul nostru vom
incepe cu o singura tabela pe care o sa o numim "anunturi". Asa dupa cum ii
spune si numele o tabela e de fapt un tabel ce contine informatii. Fiecare
coloana contine un anumit tip de informatii iar fiecare rand contine un set de
astfel de informatii. In cazul nostru un anunt reprezinta un astfel de rand.
Randurile si coloanele unei tabele arata cam asa:
| |
coloana
|
|
coloana
|
|
coloana
|
|
| rand - |
|
id
|
text_anunt
|
data_anunt
|
|
1
|
vand masina de.. |
2003-04-20
|
|
2
|
inchiriez spatiu... |
2003-04-21
|
|
|
| rand - |
Observati ca tabela noastra are o cloana ce contine anuntul ("text_anunut") si
data la care a aparut ("data_anunut"). Probabil o sa ma intrebati ce e cu
coloana "id". O proiectare buna a unei baze de date presupune ca un anumit anunt
sa fie indentificat unic. In viata de zi cu zi daca cineva ne-ar ruga sa
identificam un anunt i-am spune probabil ca e alac cu "masina de....". Dar
pentru o baza de date e un pic mai complicat sa identifice astfel in mod unic un
anunt. Si atunci folosim o coloana ce contine un numar unic. Astfel e mai simplu
sa aflam ce de fapt anunutul care ne intereseaza e anuntul 2 (id=2).
crearea unei baze de date
Haideti sa creem o astfel de baza de date (presupun ca deja ati instalat MySQL,
el functioneaza si puteti sa folositi linia de comanda SQL). Este foarte simplu
sa creati o baza de date:
| mysql> CREATE DATABASE anunturi; |
Am ales numele "anunturi" pentru baza noastra de date. Puteti alege orice
nume. Acum ca am creat baza de date trebuie sa-i spunem servarului (in cazul
nostru MySQL) ca vrem sa folosim aceasta baza de date.
Daca doriti sa stergeti o baza de date puteti utiliza:
| mysql> D ROP DATABASE nume_baza_de_date; |
crearea unei tabel
Crearea unei tabel este un lucru ceva mai complicat, pentru ca
in tabele sunt de fapt stocate informatile. Daca veti citi manualul de MySQL
veti descoperi o definitie ce la prima vedere pare criptica:
| mysql> CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
[table_options] [select_statement] |
Cam complicat nu? Sa luam un exemplu concret si sa vedem cum crea tabela
noastra cu anunturi:
mysql> CREATE TABLE anunturi (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> text_anunut TEXT,
-> data_anunt DATE NOT NULL
-> ); |
Tot pare complicat nu? Haideti sa vedem ce reprezita fiecare linie:
prima linie pare destul de simpla. daca stiti ceva engleza e suficient sa
traduceti si veti vedea ca ii spunem servarului de MySQL ca dorim sa crem o
tabela
a doua linie e in schimb ceva mai complicata. Sa o luam pe rand. Aceasta
linie comunica serverului MySQL ca dorim sa crem o coloana cu numele "id" de
timp intreg ("INT") ce se va auto incrementa ("AUTO_INCREMENT") si informatile
continute in aceasta coloana vor fi unice ("PRIMAY KEY"). V-am explicat mai sus
ca o baza de date bine proiectata trebuie sa aiba un mod de a indentifica in mod
unic o inregistrare (linie).
a treia linie ii comunica serverului MySQL ca dorim sa crem o coloana cu
numele "text_anunt" de tim "TEXT"
a patra linie ii comunica serverului MySQL ca dorim sa crem o coloana cu
numele "data_anunt" de tim "DATE" si mai mult decat atat pune conditia ca
totdeuna sa existe informatii (sa nu fie niciodata gol).
Recomandarea mea este sa consultati manualul MySQL (il veti gasi in directorul
unde ati instalat MySQL in subdirectorul "Doc") pentru a afla mai multe despre
tipuirle de date atunci cand creati o tabela.
Daca doriti sa stergeti o tabela puteti utiliza:
| mysql> D ROP TABLE nume_tabela; |
introducere de date intr-un tabel
Acum am creat baza de date si tablea dar ea inca goala. Nu am
introdus nici o informatie. Exista 2 modalitati de a introduce informatii in
baza de date. Folositi-o pe cea care vi se pare cea mai simpla:
mysql> INSERT INTO anunturi SET
-> text_anunut = "vand masina de spalat automata. tel. 11111111",
-> data_anunt = "2003-04-20"; |
sau:
mysql> INSERT INTO anunturi
-> (text_anunut, data_anunt) VALUES(
-> "inchiriez spatiu comercial ultracentral. tel 232323",
"2003-04-21"); |
Retineti ca ambele variante sunt absolut echivalente. Observati ca in nici
una din variante nu am amintit nimic de campul "id". De ce? Pentru ca initial (cand
am creat tabela) am pus conditia ca acest camp sa fie AUTO_INCREMENT, iar la
fiecare inserare MySQL va avea grija sa incrementeze cu 1 valoare precedenta si
sa o adauge automat in tabela.
vizualizarea datelor stocate
Ce eram mai greu a trecut. Acum vom incerca sa obtinem de la
MySQL informatile stocate. Daca dorim sa obtinem toate informatile din baza
nostra de date vom folosi:
| mysql> SELECT * FROM anunuturi; |
in acest caz "*" se traduce prin "toate".
Daca in schim dormim sa aflam numai anunturile folsim:
| mysql> SELECT text_anunt FROM anunuturi; |
Sau daca dorim sa aflam anunutul si data cand a fost publicat folosim:
| mysql> SELECT text_anunut, data_anunt FROM anunuturi; |
Dar daca vrem sa aflam cate anunturi au fost publicate de exemplu in data de
21 aprilie 2003?
| mysql> SELECT COUNT(*) FROM anunutur where data_anunt="2003-04-21"i; |
Dar daca vrem sa aflam toate anunturile despre masini de spalat?
| mysql> SELECT text_anunt FROM anunuturi WHERE text_anunut LIKE %"masina
de spala%t"; |
Sfatul meu e sa incercati sa va mai jucati cu astfel de interogari catre baza
de date (query in engleza).
modificare datelor stocate
La un moment dat va fi nevoie sa modificam datele stocate. Acum
veti intelege utilitatea campului "id". Sa presupunem ca vrem sa modificam
anuntul cu masina de spalat sa sa ii adaugam pretul:
| mysql> UPDATE anunturi SET text_anunt = "vand masina de spalat automata.
pret 10 milioane. tel. 11111111" WHERE id = 1; |
Puteti lesne observa ca am modificat randul ce are id=1. Daca acest camp nu
ar fi existat acesta modificare ar fi fost un pic mai dificila pentru ca ar fi
fost destul de greu sa-i comunicam MySQL ce rand vrem de fapt sa modificam.
stergerea datelor stocate
Utilitatea campului "id" se va vedea si atunci cand vom dori sa
stergem o inregistrare. Dupa campul "id" vom indentifica in mod unic
inregistrarea pe care vrem so o stergem, astfel:
| mysql> DELETE FROM anunturi WHERE id = 1; |
Sus |