1.Introducere
Un server de baze de date(in cazul de fata MySQL) este un mediu software(un pachet de
programe) care permite stocarea unei cantitati mari de informatii intr-un format organizat(intr-o
structura organizata), usor de accesat prin intermediul unor interfete de tip client-server, grafice sau
text(implicite pentru clientul MySQL), realizate cu ajutorul unor limbaje de nivel inalt(limbaje de
script, cum ar fi PHP,Perl sau alte limbaje de nivel inalt gen C,C++,Delphi,etc).Organizarea si
administrarea informatiei in cadrul serverului de baze de date este asigurata printr-un limbaj SQL,
mai precis un dialect SQL specific serverului de baze de date.Limbajul SQL reprezinta practic
veriga intermediara intre datele stocate(informatia propriu-zisa) si interfata de actiune a clientului
(realizata intr-un limbaj corespunzator).In situatia de fata, atat serverul cat si limbajul specific
acestuia poarta numele MySQL.
Setul de comenzi utilizate pentru a spune serverului MySQL ce anume sa faca este parte a
limbajului Structured Query Language(SQL), aceste comenzi mai purtand numele de interogari
SQL(SQL queries) [Mys01].SQL este un limbaj standard interactionand cu majoritatea tipurilor de
baze de date.Astfel, la o trecere de la MySQL la InterBase(spre exemplu), se poate observa ca
majoritatea comenzilor SQL sunt aproape identice(numarul de clauze optionale si/sau
caracteristicile acestora putand fi diferite).
Entitatea majora de stocare a informatiei intr-un server de baze de date este baza de date
(DATABASE).La randul ei, o baza de date contine una sau mai multe tabele, fiecare dintre ele
continand informatii intr-un format tabelat(linii si coloane).Astfel, o tabela(TABLE) contine una
sau mai multe coloane, denumite si campuri.Fiecare coloana poate stoca un anumit tip de
informatie.Fiecare linie din cadrul unei tabele poarta numele de articol sau inregistrare.
2.Conectarea la MySQL
Interfata standard(inclusa in mediul software), care permite lucrul cu bazele de date MySQL
(interactiunea directa si gestionarea/administrarea), asigura conectarea la serverul de baze de date
MySQL si respectiv scrierea si executarea succesiva(interpretarea) a cate unei singure comenzi
SQL.Software-ul MySQL contine, in principiu, un modul server si respectiv un modul client.
Modulul client permite o conectare(inclusiv de la distanta) la serverul de baze de date. In
momentul instalarii unui server MySQL(pe o platforma Windows sau Linux), modulul client este
automat instalat impreuna cu serverul. Pe o platforma Linux, programul de conectare poarta
numele ‘mysql’(si este implicit instalat in directorul /usr/local/mysql/bin). Pe o platforma
Windows, programul se numeste mysql.exe (si este implicit instalat in directorul C:\mysql\bin).
In cazul in care serverul MySQL este instalat pe un host Web(server Internet) la distanta,
deci pe un calculator care nu este acelasi cu calculatorul client(de pe care se incearca conectarea),
cel mai simplu mod de conectare necesita utilizarea unui program Telnet sau SSH(Secure Shell)
pentru login-area la serverul Web, urmata de lansarea in rulare a programului ‘mysql‘.Este cazul cel
mai des intalnit in situatia in care MySQL-ul este instalat pe un server de Web, pe o platforma
Linux, iar clientul incearca o conectare de pe o platforma Windows. In situatia in care instalarea
serverului MySQL se face pe propriul calculator(de regula sub Windows), acesta va contine atat
modulul server cat si client. Un alt caz este cel in care pe calculatorul client(propriul computer) se
instaleaza MySQL-ul(obtinut free de la adresa http://www.mysql.com), utilizat apoi pentru
conectarea via Internet la un server MySQL.
Indiferent de metoda utilizata, conectarea clientului la serverul MySQLimploica o comanda
de genul(tastata la prompter-ul sistemului de operare):
mysql –h hostname –u username -p
unde:
- hostname este numele sau adresa IP a calculatorului pe care ruleaza serverul
MySQL.Daca programul client ruleaza pe acelasi calculator ca si programul server, optiunea –h
hostname poate fi omisa. Nu exista nici o legatura intr numele user-ului de conectare la
serverul(Linux sau Windows) pe care este instalat MySQL-ul si numele de user MySQL.
- username este numele de user.
- optiunea – p cere user-ului care se conecteaza sa introduca parola corespunzatoare(va
apare un prompt pentru parola).
Dupa instalare, un user implicit este creat pentru conectare(pentru host-ul pe care este
instalat serverul MySQL,respectiv pentru un host-client la distanta),fara nume si fara parola.In
acest caz conectarea(de pe host-ul local) se face tastand doar comanda ‘mysql’ fara parametrii(sub
Linux) sau lansand mysql.exe (sub Windows).Mai multe amanunte despre conectarea la un server
MySQL in paragraful care prezinta administrarea unui astfel de server.
In cazul unei conectari reusite, programul client MySQL va afisa prompter-ul corespunzator
liniei de comanda:
mysql>
La aparitia liniei de comanda,serverul MySQL este pregatit pentru a primi comenzi.Pentru
inceput, se vizualizeaza bazele de date care sunt momentan sub gestiunea serverului:
mysql> SHOW DATABASES ;
Observatie: Incheierea unei comenzi trebuie sa se faca neaparat prin ‘;’.In cazul in care
lipseste ‘;’ , si se tasteaza ENTER, se considera ca respectiva comanda este scrisa pe mai multe
randuri, asteptandu-se continuarea editarii comenzii,pana la introducerea caracterului ;.Altfel spus,
ENTER dupa caracterul ; inseamna executarea comenzii iar ENTER dupa orice alt caracter
inseamna continuarea editarii comenzii pe o noua linie. Spre exemplu, comanda anterioara poate fi
scrisa pe 3 linii astfel:
mysql> SHOW
->DATABASES
-> ;
Se recomanda scrierea unei comenzi de lungime mare pe mai multe linii.Executia comenzii
SHOW DATABASES are urmatorul efect pe ecran:
Database
mysql
test
2 rows in set (0.00 sec)
Serverul MySQL-ul utilizeaza o prima baza de date, numita ‘mysql‘ , pentru a stoca numele
user-ilor, parolele corespunzatoare acestora si drepturile lor(in diverse tabele, asupra carora se va
reveni).Stergerea acestei baze de date(operatie nerecomandata) poate conduce la erori in
functionarea server-ului.
A doua baza de date(test) este un exemplu de baza creata implicit in urma instalarii fiind,
dupa cum ii spune si numele, o baza pentru testare.Aceasta baza de date poate fi stearsa oricand, cu
o comanda de genul:
mysql> DROP DATABASE test ;
In urma unei astfel de comenzi(tastand ENTER), serverul returneaza, ca si confirmare a
executarii operatiei, mesajul :’QUERY OK’.A se observa ca nu se cere inca o confirmare a intentiei
de stergere, astfel incat este necesara o atentie deosebita cu comenzile DROP DATABASE care pot
distruge informatii(stergand irevocabil o baza de date).
In cazul in care, in timpul scrierii unei comenzi, se constata ca aceasta este gresita sintactic
sau va executa o operatie nedorita, se poate renunta la ea prin postfatarea ei cu sirul ‘\c’, inainte de
incheierea ei prin ; ,astfel revenindu-se la o linie noua, pe care se poate scrie o alta comanda.
Cu alte cuvinte sirul ‘\c’ conduce la abandonarea executiei comenzii curente, aceasta fiind
ignorata.Spre exemplu :
mysql> DROP DATABASE test \c
mysql>
Iesirea din programul client MySQL se face prin comenzile ‘quit’ sau ‘exit’.Acestea sunt
singurele comenzi care nu trebuie incheiate prin punct-si-virgula ; .
mysql> quit
Bye
3.Operatii MySQL
Primul pas la crearea unei aplicatii cu MySQL consta in crearea unei baze de date ca prim
nivel ierarhic pentru stocarea informatiei.Comanda pentru crearea unei baze de date cu numele
‘test’, spre exemplu (presupunand ca nu exista deja creata o baza cu un asemenea nume) este :
mysql> CREATE DATABASE test ;
In acest moment, baza de date ‘test’ este creata, dar pentru a putea lucra cu ea trebuie
deschisa printr-o comanda prin care i se comunica serverului MySQL care este baza de date activa
in acel moment :
mysql> USE test ;
Operatia imediat urmatoare crearii unei baze de date (vide in acest moment) consta in
crearea unor tabele in aceasta.Crearea unei baze de date conduce (din punct de vedere a sistemului
de operare) la creareaunui nou director.Daca se doreste exportareaunei baze de date de pe un server
MySQL pe altul,este suficienta copierea directorului respective,impreuna cu tot continutul
lui.Crearea unei noi tabele implica crearea a trei fisiere (cu acelasi nume si alte extensii) plasate
evident in directorul corespunzator bazei curente.
Odata creata tabela, ceea ce mai ramane de facut pentru a o putea utiliza la ceva, consta
in stocarea unor informatii in aceasta.Comanda pentru adaugarea unui nou articol (o noua linie)
intr-o tabela are doua forme.Sintaxele principiale ale acestora sunt :
mysql> INSERT INTO nume_tabela
-> ( Nume_coloana1, Nume_coloana2, ...)
-> VALUES (valoare1, valoare2, …);
respectiv
mysql> INSERT INTO nume_tabela SET
-> Nume_coloana1= valoare1,
-> Nume_coloana2= valoare2,
-> …
-> ;
Spre exemplu, urmatoarele doua comenzi sunt echivalente:
mysql> INSERT INTO TABEL1 SET nume=’Dan’, data=’2002-05-2
sau
mysql> INSERT INTO TABEL1 (nume,data) VALUES (‘DAN’, ‘2002-05-27’)
Inserarea datei curente se poate realize utilizand cuvantul cheie CURRENT_DATE:
mysql> INSERT INTO TABEL1 (NUME, DATA)
-> VALUES (‘IOAN’, CURRENT_DATE);
Introducerea de date dintr-un fisier text, in care inregistrarile sunt pozitionate pe linie, iar
elementele unui articol sunt delimitate de TAB:
mysql> LOAD DATA INFILE “fisier. txt” INTO TABLE tabel1;
Comanda SELECT, utilizata pentru vizualizarea datelor dintr-o tabela, este cea mai
complexa comanda a limbajului SQL.Motivul acestei complexitati rezida din insasi ‘forta’ si
flexibilitatea unei baze de date de a stoca si prezenta datele.
Cea mai simpla sintaxa de utilizare a comenzii SELECT, particularizata la exemplul
considerat si pana acum, este :
mysql> SELECT * FROM tabel1 ;
avand urmatorul rezultat :
ID NUME DATA
1 ION 2002-04-25
2 DAN 2002-05-27
1
1 row in set (0.00 sec)
De asemenea se pot folosi si clause suplimentare.Spre exemplu, in comanda urmatoare,
functia LEFT va permite afisarea unei colone suplimentare obtinuta pe baza campului (coloanei)
nume, trunchiata la primele 2 caractere din stanga :
mysql> SELECT id, nume, LEFT(nume, 2) FROM tabel1;
returnand:
i num left
d e (nume,2)
1 ION IO
2 DAN DA
3 IOAN IO
3 rows in set (0.11 sec)
Utilizarea functiei LIKE si a caracterului special % (care inlocuieste un sir de caractere
oarecare) in comanda SELECT are ca effect o interogare cu cautare aproximativa.Astel comanda:
mysql> SELECT nume FROM tabel1 WHERE nume LIKE “%io%”;
returneaza acele linii (nume) pentru care campul ‘nume’ contine sirul ‘io’:
num
e
ION
IOAN
2 rows in set (0.00 sec)
Evident ca pot fi utilizate si conditii multiple, folosind operatorii logici (AND in cazul
de fata):
mysql> SELECT id, nume FROM tabel1 WHERE nume LIKE “io%”
->AND data> “2002-04-02”
avnd ca rezultat:
i num
d e
1 ION
3 IOAN
2 rows in set (0.00 sec)
Odata datele introduce intr-o tabela a bazei de date, apare foarte des necesitatea de
modificare a acestora (fie din motive de corectare a unor eventuale greseli, fie pentru o simpla si
necesara reactualizare a acestora).Comanda UPDATE, folosita pentru modificarea datelor dintr-o
tabela, are urmatoarea sintaxa generala:
mysql> UPDATE table_name SET
-> col_name = new_value, …
-> WHERE conditions;
Spre exemplu, daca se doreste modificarea datei corespunzatoare articolului cu id-ul
1 din tabela ‘tabel 1’, se scrie o comanda de genul :
mysql> UPDATE tabel1 SET data=”1999-06-02” WHERE id=1;
Sau, daca se doreste o reactualizare a datei pentru toate articolele al caror ‘nume’ care incep cu
sirul de caractere ‘io’:
mysql> UPDATE tabel1 SET data=”1999-06-01”
-> WHERE nume LIKE “io%”;
Efectul modificarii efectuate este present pe ecran sub forma unui mesaj de
confirnare:
Query OK, 2 rows affected (0.11 sec)
Rows matched: 2 Changed: 2 Warnings: 0
O situatie speciala a constitue modificarea/incarcarea unui camp de tip BLOB (cu o imagine spre
exemplu).Spre exemplificare, o astfel de operatie utilizeaza functia
LOAD_FILE(“cale\\nume_fisier_sursa”), si se poate face cu o comanda de genul:
mysql> UPDATE tabel3 SET imag=LOAD_FILE(”c:\\dan.jpg”) WHERE id=3;
S-a folosit functia LOAD_FILE pentru precizarea fisierului sursa care va fi
incarcat in tabela (evident, tabela avand un camp “imag” de tip BLOB).De remarcat dublarea
caracterelor ‘\’ care apar calea spre fisierul sursa (pentru o platforma WINDOWS).
3.6. Stergerea datelor dintr-o tabela
REZUMAT
Un server de baze de date (in cazul de fata MySQL) este un mediu software care permite stocarea
unei cantitati mari de informatii intr-un formet organizat.
Intrebari
Care sunt cele doua componente de baza ale MySQL-ului?
Pentru a putea acorda drepturi user-ilor de pe diverse host-uri, MySQL permite specificarea
unui user_name sub forma user@host.In cazul in care numele user-ului contine caractere
speciale(‘-‘,’%’, ultimul pe post de caracter wild-card), acesta trebuie incadrat intre ’’(spre
exemplu, ‘user-test’@’host-test’).
Dupa instalarea MySQL, urmatorii useri sunt valizi si implicit creati (fiind stocati in tabela
mysql.user), putand fi vizualizati cu o comanda de genul :
mysql> select user, password, host from mysql.user ;
root localhos
root t
%
localho
st
%
4 rows in set (0.00 sec)
Se poate observa existenta a 4 useri impliciti, fara parole (practic 2 ca nume), cu privilegii
globale.Un user root, atat pentru accesarea de pe host-ul local (localhost), cat si pentru accesul de
la distanta de pe orice alt calculator care are instalat un client MySQL (%), si un user fara nume (de
asemenea pentru accesul de pe host-ul local sau de pe un computer la distanta).
Facand referire la versiunea MySQL 3.23.51 (pentru Windows) pe care au fost rulate toate
exemplificarile facute (dar fara o limitare stricta la acesta versiune), existenta unui user fara nume
permite lansarea in executie a unui client MySQL printr-o simpla lansare a executbilului
mysql.exe.In acest caz, protectia impotriva unor useri neautorizati este practic inexistenta.
Cunoscand numele (sau IP-ul) host-ul pe care este instalat serverul MySQL, oricine se
poate conecta cu drepturi depline, folosind o comanda (lansata din prompter-ul DOS sau cu
optiunea RUN... din meniul sistemului de operare Windows) de forma :
mysql –h IP_adress sau mysql –h nume_calculator (spre exemplu:mysql –h
10.0.27.3 sau mysql –h stargate,stargate fiind numele calculatorului cu IP-ul 10.0.27.3 pe
care este instalat serverul MySQL).
In mod normal, dupa o instalare a server-ului MySQL, acesta va fi pornit automat la orice
pornire a calculatorului gazda.O pornire manuala a serverului, se poate face prin lansarea
programului winmysqladmin.exe.Atat programul de lansare a serverului (sin u numai), cat si
aplicatia client (lansata prin rularea mysql.exe), sunt localizate (implicit) in directorul
c:\mysql\bin.La lansarea pentru prima data a aplicatiei winmysqladmin.exe se poate crea
(printr-un meniu) un alt user diferit de cei implicit existenti.
Asigurarea unei protectii imediat dupa instalarea aplicatiei implica setarea unei parole
pentru userii impliciti.Urmatoarea secventa exemplifica setarea unei parole (lia) pentru userul fara
nume (pentru acces atat de pe host-ul local cat si de la distanta) :
mysql> Update mysql.user SET password=PASSWORD (‘lia’)
->WHERE user=’’ ;
sau mysql –h 10.0.27.3 –u ‘’ –plia (fara spatiu intre –p si parola propriu-zisa, aceasta metoda
fiind mai putin recomandata deoarece, dupa cum se observa fata de cazul precedent, parola apare in
clar).
Aceleasi operatii trebuie efectuate si pentru superuser-ul root.
Crearea de noi utilizatori MySQL se poate realiza fie utilizand comanda GRANT, fie
prin manipularea directa a continutului tabelelelor bazei de date dedicate administrarii (mysql.db).
Prima metoda este preferata, datorita faptului ca este mai concisa si reduce riscul
aparitiei unor erori de administrare.
Sa incercam crearea unor alti useri, cu diverse drepturi.Pentru toti noii utilizatori creati
in exemplele urmatoare, se presupune ca userul client curent (cel care creeaza noii useri) este userul
root, cu toate drepturile posibile.
Crearea unui user nou (nelu), cu toate privilegiile globale, cu o parola, se poate realiza
cu o comanda de genul :
Optiunea WITH GRANT OPTION permite user-ului astfel creat sa creeeze la randul
lui un user cu toate drepturile de care el dispune.
Vizualizarea catorva din privilegii pentru userii existenti se poate face astfel :
Comanda anterioara arata ca userul nou, astfel creat, primeste toate privilegiile.
Stergerea unor privilegii pentru user-ul existent se poate face cu o comanda de genul:
iar ca rezultat al executiei comenzii, se poate observa comparativ modificarea realizata in tabela
user:
De remarcat ca, userul fara nume, implicit creat la instalare pentru alti clienti decat cei
de pe host-ul local (inregistrarea 2 din tabelul anterior afisat), nu are nici un privilegiu, lucru
explicabil din motive de securitate.
Alte cateva exemple de creare a unor noi useri:
In primul caz, s-a creat un user cu acelasi nume ‘nelu’, dar cu o alta parola, caruia ii
este permisa conectarea doar de pe un host client la distanta.Evident ca se putea prevede o aceeasi
parola ca si pentru user-ul ‘nelu’, creat pentru acces doar de pe localhost.De remarcat totusi ca, cei
doi utilizatori cu numele ‘nelu’, sunt pana la urma doi useri distincti.Cu alte cuvinte, daca “unui
acelasi” utilizator (avand acelasi nume de user si password) se doreste a I se aloca drepturi, atat
pentru accesul local cat si de la distanta, sunt necesare doua comenzi GRANT (de fapt creandu-se
pana la urma doi useri distincti, lucru observabil si din punct de vedere al numarului de articole-
doua- din tabela de administrare).
Crearea unui astfel de ‘super-user’ nu prea este necesara, doar userul pe post de
administrator MySQL (implicit, “root”) avand toate drepturile asupra resurselor
serverului.Acordarea unui numar excesiv de drepturi unui utilizator novice sau care nu are nevoie
de aceste drepturi, poate conduce la o insecuritate a informatiei memorate in bazele de date (atat
cele de lucru, cat si in cea de administrare)
In al doilea caz este creat un user (‘adi’, cu parola ‘adi’), si care are toate drepturile
setate pe ‘N’, clauza USAGE permitand crearea unui user fara nici un drept, doar cel de conectare
la server.Se presupune ca, unui astfel de user, i se vor acorda mai tarziu drepturi specifice asupra
unei anumite baze de date.
Observatie : Un astfel de user nu poate crea/sterge/accesa o baza de date, dar poate vedea numele
bazelor de date de pe server si are drepturi in baza de date ‘test’, implicit creata la instalare.
Aceeasi useri se puteau crea si folosind comanda INSERT asupra tabelei mysql.user
si comandand apoi serverului sa reincarce tabelele cu privilegii :
mysql> INSERT INTO mysql.user
-> VALUES (‘localhost’, ‘nelu’, PASSWORD (‘password’),
-> ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’,
-> ‘Y’, ‘Y’);
mysql> INSERT INTO mysql.user
-> VALUES (‘%’, ‘nelu’, PASSWORD (‘alt_password’),
-> ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’,
-> ‘Y’, ‘Y’);
mysql> INSERT INTO mysql.user (Host, User, Password)
-> VALUES (‘localhost’, ‘adi’, ‘adi’);
Se poate observa ca, pentru userul nou creat (cristi),in tabela de privilegii
mysql.user este creata o noua inregistrare, dar nici un privilegiu nu este setat
afirmativ.Aceasta noua inregistrare permite doar o conectare la serverul MySQL.
S-au prezentat aceste vizualizari, pentru a arata ca, acordarea de drepturi pe o anumita baza
de date unui user nou creat, conduce la afectarea atat a tabelei user cat si db din baza de date
mysql.
Evident ca se puteau crea acesti useri(pentru ca, pana la urma, sunt practic trei useri) folosind
o serie de comenzi INSERT asupra celor doua tabele, urmate de o comanda FLUSH
PRIVILEGES.
Observatie : Bazele de date asupra carora li se acorda unor useri drepturi pot sa fie create ulterior
crearii acelor useri.