Introducere in MySQL (exercitii din linia de comanda),
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 servar. 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> DROP 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> DROP 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; |
|