Documente Academic
Documente Profesional
Documente Cultură
Însă, deși conectarea din linia de comandă este foarte ușoară, lucrul cu instrucțiuni
SQL în acest mediu este mai dificil. Mult mai ușor este să utilizăm programe de tip
client MySQL care permit conectarea la serverul de baze de date MySQL și, în
plus, oferă o interfață care permite vizualizarea elementelor componente ale bazei
de date (tabele, tabele virtuale, proceduri stocate, etc.).
Modul prietenos pe care îl prezintă aceste aplicații prin interfața grafică care este
pusă la dispoziția utilizatorului, fac ca aceste programe să fie preferate pentru
utilizare atunci când se interacționează cu baze de date MySQL.
Și în cadrul acestui modul vom utiliza un program de tip client MySQL, și anume, tot
HeidiSQL, dar vom aloca spațiu în cadrul acestui capitol prezentării posibilității
conexiunii la serverul MySQL din linia de comandă și a rulării de instrucțiuni SQL
tot din linia de comandă.
Clientul mysql.exe
Clientul de tip linie de comandă face parte din kit-ul de instalare MySQL. El se
numește mysql.exe și permite conectarea atât la un server local (localhost) cât și la
un server la distanță.
Aplicația cmd.exe poate fi pornită și direct din locația în care se află pe disc, și
anume: C:\Windows\System32\cmd.exe
Evident, dacă este instalat un alt program care, printre componentele instalate are și
un server de baze de date MySQL (de exemplu: XAMPP, EasyPHP, etc.) sau dacă
este instalat direct serverul MySQL, atunci locația în care se găsește aplicația client
mysql.exe se va afla într-o altă locație pe disc, decât cea indicată aici pentru
WAMP.
Mai există o variantă mai rapidă care constă în adâugarea acestei căi în care este
localizat clientul mysql.exe, în variabila de sistem PATH a sistemului de operare
Windows care va permite, apoi accesarea clientului, direct prin comanda mysql în
Command Prompt (cmd.exe).
Dintre cele două tipuri de variabile (User variables și System variables), trebuie
selectată din secțiunea System variables, variabila de sistem PATH și apăsat
butonul Edit.
Se va deschide următoarea fereastră:
După completarea acestei variabile se va apăsa butonul OK, iar, dacă serviciul de
MySQL este pornit, va trebui restartat. În acest moment nu mai este necesară
schimbarea directorului în Command Prompt cu ajutorul comenzii cd, ci poate fi
executată direct comanda mysql ca în imaginea următoare:
Instrucțiunea mysql mai are însă și alți parametri care permit specificarea serverului
unde se realizează conexiunea, a userului care se va conecta și a parolei de
conectare, dacă userul are setată o parolă.
Clientul mysql.exe (deci, linia de comandă) poate fi utilizat și pentru rularea unui
fișier text ce conține comenzi SQL (cu extensia .sql).
Dacă fișierul .sql nu se găsește în calea curentă, atunci, în fața numelui fișierului
trebuie trecută calea către fișier. Executarea acestei comenzi va duce la rularea
instrucțiunilor SQL ce se găsesc în fișier.
Totodată, direct în linia de comandă pot fi folosite toate instrucțiunile SQL cunoscute:
creare de baze de date, creare de tabele, ștergere, instrucțiuni de manipulare a
datelor, etc.
Atunci când este utilizat clientul linie de comandă sunt foarte utile comenzile de
afișare a bazelor de date de pe server, a tabelor din bazele de date, a structurii
tabelelor, a rutinelor stocate, etc. Aceste instrucțiuni, foarte simple, de altfel, sunt mai
puțin utilizate atunci când interacțiunea cu baza de date se realizează printr-un client
ce prezintă o interfață vizuală, cum este cazul HeidiSQL sau MySQL Workbench.
SHOW DATABASES;
În urma execuției acestei instrucțiuni, vor fi listate bazele de date existente pe server
la care are acces utilizatorul conectat. Pe lângă bazele de date create de utilizator se
mai află și baze de date esențiale pentru funcționarea serverului.
Este vorba despre baza de date mysql, cea în care serverul memorează privilegiile
diferiților clienți asupra informațiilor memorate în baza de date și despre baza de
date information_schema ce conține informații despre celelate baze de date
stocate pe server (meta-informație). Instrucțiunea suportă și clauza LIKE care
permite impunerea unor condiții pentru a afișa doar anumite baze de date.
Sintaxa instrucțiunii cu adăugarea clauzei LIKE va fi:
De asemenea, o bază de date mai este denumită și schemă, așa că, mai există un
cuvânt cheie în MySQL, SCHEMA, care este echivalent cu DATABASE. Deci,
instrucțiunea de vizualizare a bazlor de date (schemelor) de pe serverul la care s-a
realizat conexiunea poate să fie și următoarea:
USE nume_bază_de_date;
Comanda care returnează toate tabelele conținute de o bază de date MySQL la care
utilizatorul conectat are acces este următoarea:
SHOW TABLES;
Comanda care permite vizualizarea structurii unei tabele stocată în baza de date
MySQL curentă are mai multe forme pe care le prezentăm în continuare:
DESCRIBE nume_tabelă;
SHOW TRIGGERS;
Comenzi de creare
Recapitulăm câteva comenzi din Limbajul de Definire a Datelor, la care vom
introduce și câteva clauze noi, dar nu vom mai prezenta instrucțiunile din Limbajul
de Manipulare a Datelor, a căror sintaxă este bine cunoscută și asupta cărora s-a
insistat pe parcursul capitolelor din primul modul al acestui curs.
Pe un server pot fi găzduite una sau mai multe baze de date, fiecare bază de date
conținând tabele. Pentru crearea unei baze de date (scheme), dacă utilizatorul
conectat are această permisiune, poate fi utilizată una din următoarele comenzi:
Există o restricție de a crea mai multe baze de date cu același nume. Tentativa de a
executa o instrucțiune SQL de creare a unei baze de date cu un nume care există
deja pe serverul respectiv va genera o eroare. Astfel că, pentru a determina crearea
unei baze de date doar în cazul în care aceasta nu există se poate utiliza o clauză
care verifică existența bazei respective, este vorba de clauza condițională IF NOT
EXISTS. Deci, prin introducerea acestei clazue în cadrul instrucțiunii de creare, se
va obține următoarea comandă:
Dacă baza de date cu numele indicat există pe server, sistemul nu va mai genera o
eroare ca în cazul instrucțiunii precedente, ci un warning, un avertisment. Aceste
avertismente (warning-uri) pot fi, la rândul lor, afișate prin executarea următoarei
instrucțiuni:
SHOW WARNINGS;
Comenzi de ștergere
Comanda utilizată pentru ștergerea unei baze de date (scheme) de pe server, în
cazul în care utilizatorul conectat, are această permisiune, este prezentată în
continuare:
DROP DATABASE nume_bază_de_date;
DROP SCHEMA nume_bază_de_date;
Atenție, dacă baza de date conține tabele populate cu informații, ștergerea unei
scheme (baze de date) va duce la ștergerea tuturor obiectelor (tabele, tabele
virtuale, proceduri stocate, etc.) și a informațiilor (înregistrărilor) conținute de baza de
date respectivă.
Dacă se încearcă ștergerea unei baze de date care nu există pe server, atunci,
sistemul va genera o eroare care va semnala acest aspect.
Pentru a evita apariția unei erori, la fel ca în cazul creării schemei, se poate și la
ștergere adăuga la instrucțiunea DROP o clauză condițională ce verifică existența
bazei de date ce apare în instrucțiunea de ștergere. Este vorba despre clauza IF
EXISTS. Astfel, instrucțiunea de ștergere a unei baze de date devine, prin
adăugarea acestei clauze, următoarea:
DROP DATABASE IF EXISTS nume_bază_de_date;
DROP SCHEMA IF EXISTS nume_bază_de_date;
Dacă este executată această instrucțiune, iar baza de date a cărei ștergere se
încearcă nu se găsește pe server, sistemul nu va mai genera o eroare, ci un
avertisment (warning).
În MySQL există și comenzi care permit modificarea parametrilor unei baze de date.
Astfel, se poate modifica setul de caractere utilizat la un moment dat într-o bază de
date sau setul de reguli impuse pentru compararea caracterelor dintr-un set și pentru
ordonarea lor (collation).
Comenzi de modificare
Instrucțiunea utilizată în acest sens este ALTER DATABASE sau ALTER SCHEMA
și poate fi executată pentru modificarea ambilor parametri simultan, sau doar pentru
modificarea unuia dintre ei.
În continuare vom prezenta cele trei variante care permit modificarea, pe rând a
setului de caractere, a collation, dar și modificarea simultană a celor doi parametri.
Back-up și restore
În continuare vom expune modalități de realizare a back-up-ului, respectiv, restore-
ului bazelor de date din linia de comandă. Practic, în urma operației de back-up se
va salva un fișier într-o anumită locație de pe disc de unde poate fi restaurată o bază
de date (sau mai multe baze de date de pe server) în cazul în care intervin
probleme.
Back-up
Back-up-ul bazei de date se face prin comanda mysqldump urmată de numele
bazei de date și de fișierul în care se face salvarea. Este posibilă și o opțiune ce
specifică salvarea tuturor bazelor de date de pe server. Comanda are următoarea
sintaxă și se execută din directorul bin al mysql, așadar înainte de conectarea la
mysql:
Restore
Comanda prin care se realizează restaurarea unei baze de date este cea de
încărcare și de executare a unui fișier extern de la o anumită locație de pe disc.
Comanda se va executa din directorul bin al mysql și are următoarele forme (fără
numele bazei de date dacă există instrucțiunea de creare în fișier sau conține și
numele bazei de date când baza de date există pe server și se refac doar anumite
tabele):
Comanda următoare este folosită pentru a crea o bază de date dacă instrucțiunea
de creare nu se regăsește în fișierul .sql ce va fi executat:
mysqladmin create nume_bază_de_date
Administrarea utilizatorilor
Crearea de utilizatori noi
Pentru crearea unui utilizator se folosește instrucțiunea CREATE USER care are
următoarea sintaxă:
CREATE USER specificație_utilizator [, specificație_utilizator ...];
În instrucțiune, specificație_utilizator este de forma:
nume_utilizator@host [IDENTIFIED BY [PASSWORD] 'parola']
Crearea unui utilizator fără parolă se face astfel:
CREATE USER 'bogdan'@localhost;
Utilizatorul bogdan se va conecta la baza de date fără parolă. Conectarea este
realizată la localhost, deci, la serverul instalat pe calculatorul propriu. O conexiune
la baza de date fără parolă este nesigură. Pentru a fi sigură o conexiune, utilizatorul
trebuie să aibă definită și o parolă:
CREATE USER 'bogdan'@localhost IDENTIFIED BY 'qwe1234';
Utilizatorii (userii) vor fi stocați, în momentul creării în tabela user, care este o tabelă
aflate în schemele implicte ale MySQL, care vin direct instalate pe server. Mai
precis, tabela user se află în schema (baza de date) mysql. După cum observăm la
crearea userului se specifică numele utilizatorului între ghilimele, fiind șir de
caractere, după care urmează simbolul „@”, care delimitează numele utilizatorului
de host-ul (serverul) la care se conectează. Host-ul este stocat în tabelă tot ca un șir
de caractere, de aceea este plasat tot între ghilimele.
Se poate crea un utilizator și fără specificarea host-ului, în acest caz, userul astfel
creat se poate conecta la orice host.
Toate aceste operații asupra utilizatorilor (creare, stabilire parolă, redenumire user și
ștergere) sunt realizate de către utilizatorul root, care are toate aceste drepturi
implicite.
La instalarea MySQL este creat implicit un utilizator numit root care are toate
drepturile activate. Din motive de securitate, acest utilizator este recomdat să fie
utilizat doar pentru administrare. Deci, el va acorda drepturi celorlalți utilizatori.
Pentru fiecare utilizator care va interacționa cu baza de date trebuie creat un user
nou, iar fiecare user creat va primi o serie de drepturi (privilegii) pe care le poate
utiliza pentru a interacționa cu obiectele din baza de date.
Câteva dintre aceste privilegii necesită o atenție sporită, deoarece prin acordarea
acestor drepturi pot fi realizate modificăr substanțiale în baza de date.
Privilegiul GRANT permite utilizatoril să dea mai departe privilegiile lor și altor
utilizatori. Astfel, doi utilizatori cu privilegii diferite și le pot combina.
Administrarea privilegiilor
Adăugarea de drepturi sau privilegii pentru utilizatori se realizează prin utilizarea
instrucțiunii GRANT, iar eliminarea de privilegii (drepturi) pe care anumiți utilizatori le
dețin se realizează prin utilizarea instrucțiunii REVOKE. Comanda pentru eliminarea
sau retragerea privielgiilor (permisunilor, drepturilor), REVOKE, este, practic inversa
comenzii GRANT.
Niveluri de privilegii
Comanda GRANT permite crearea utilizatorilor și/sau stabilirea, respectiv,
modificarea drepturilor acestora pe patru nivele de privilegii:
· GLOBAL – se aplică tuturor bazelor de date de pe server;
· DATABASE – se aplică tuturor tabelelor dintr-o bază de date;
· TABLE – se aplică tuturor coloanelor dintr-o tabelă;
· COLUMN – se aplică doar coloanelor specificate explicit.
Acordarea de privilegii
Sintaxa generală a comenzii de acordare de privilegii (GRANT) este următoarea:
GRANT
tip_privilegiu [(listă_coloane)] [,tip_privilegiu [(listă_coloane)]] …
ON [tip_obiect] nivel_privilegiu
TO nume_utilizator [IDENTIFIED BY 'parola']
[WITH GRANT OPTION | opțiuni_resurse];
Vizualizarea privilegiilor
Pentru a consulta privilegiile acordate prin comanda GRANT, sau, implicit, la
definirea unui utilizator (user) nou se va executa utmătoarea instrucțiune:
SHOW GRANTS [FOR nume_utilizator];
Dacă un utilizator va rula instrucțiuni pentru care nu a primit drepturi (privilegii),
atunci sistemul va genera o eroare care va semnala acest lucru, adică o eroare care
va informa asupra faptului că utilizatorul respectiv nu are privilegii pentru a efectua
respectiva operație.