Documente Academic
Documente Profesional
Documente Cultură
http://elth.pub.ro/~abordianu
1. Introducere
1. Viteză. MySQL este rapid. Programatorii pretind că MySQL este cel mai rapid sistem de baze de date
pe care îl puteţi găsi.
2. Uşurinţă în utilizare. MySQL este un sistem de baze de date cu performanţe ridicate, dar relativ simplu,
a cărui configurare şi administrare sunt mult mai simple decât în cazul sistemelor mai mari.
3. Cost. MySQL este gratuit pentru majoritatea utilizărilor interne.
4. Suport pentru limbaje de interogare.
5. Caracteristici.
La server se pot conecta mai mulţi clienţi simultan.
Clienţii pot folosi mai multe baze de date simultan. Puteţi obţine acces la MySQL în mod interactiv,
folosind numeroase interfeţe care vă permit să introduceţi interogări şi să vizualizaţi rezultate.
Sunt disponibile o multime de interfeţe de programare pentru limbaje precum C, Java, PHP. Astfel,
există opţiunea de a folosi programe client preambalate sau de a vă scrie propriile programe client
pentru aplicaţii personalizate.
6. Conectivitate şi securitate. MySQL poate fi folosit integral în reţele, iar bazele de date sunt accesibile
de oriunde din Internet, deci datele pot fi împărțite cu oricine, oriunde. MySQL are controlul accesului,
astfel încât persoanele care nu au dreptul să citească datele nu vor avea această posibilitate.
7. Portabilitate. MySQL rulează pe numeroase varietăţi de UNIX, precum şi pe alte sisteme non-UNIX, ca
Windows şi OS/2.
8. Distribuţie liberă. MySQL este uşor de obţinut.
3. Terminologie structurală
În lumea bazelor de date, MySQL este clasificat ca sistem de gestiune a
bazelor de date relaţionale (SGBDR). Această expresie poate fi divizată
după cum urmează:
• Baza de date (literele BD din abrevierea SGBDR) constituie depozitul pentru informaţiile
stocate, structurat într-un mod simplu:
Colecţia de date dintr-o bază de date este organizată în tabele.
Fiecare tabel este organizat în rânduri şi coloane.
Fiecare rând dintr-un tabel este considerat o înregistrare.
Înregistrările pot conţine mai multe componente de informaţie; fiecare coloană dintr-un
tabel corespunde uneia din aceste componente.
• Sistemul de gestiune (literele SG) este programul care vă permite să vă folosiţi datele prin
inserarea, regăsirea, modificarea sau ştergerea înregistrărilor.
• Cuvântul „relaţional" (iniţiala R) indică un anumit tip de SGBD, adică unul care se pricepe
foarte bine la relaţionarea informaţiilor stocate într-un tabel cu informaţiile stocate într-un alt
tabel, prin căutarea elementelor comune din fiecare tabel. Puterea unui SGBD relaţional
constă în capacitatea sa de a extrage în mod convenabil date din aceste tabele şi de a
combina informaţii din tabele corelate pentru a genera răspunsuri la întrebări la care nu se
poate răspunde numai pe baza tabelelor individuale.
4. Stabilirea şi întreruperea conexiunilor cu serverul
Sintaxa standard de începe a unei sesiune mysql are forma următoare:
mysql -h nume_gazda -u nume_utilizator –p
Cele două interogări par similare, dar a doua eşuează, deoarece paranteza nu
apare imediat după numele funcţiei.
6. Crearea bazei de date
Utilizarea unei baze de date implică mai multe etape:
1.Crearea (iniţializarea) bazei de date;
2.Crearea tabelelor din cadrul bazei de date;
3.Interacţiunea cu tabelele prin inserţia, regăsirea, modificarea sau ştergerea datelor.
Regăsirea datelor existente este, evident, cea mai frecventă operaţie efectuată cu o
bază de date. Următoarele operaţii, în ordinea frecvenţei, sunt inserţia datelor noi şi
actualizarea sau ştergerea datelor existente. Mai puţin frecvente sunt operaţiile de
creare a tabelelor, iar operaţia cel mai puţin frecventă este crearea bazelor de date.
Pentru a crea o bază de date nouă, conectaţi-vă la server folosind mysql şi apoi emiteţi o
instrucţiune CREATE DATABASE care specifică numele bazei de date:
mysql> CREATE DATABASE samp_db;
Va trebui să creaţi baza de date samp_db înainte de a putea crea oricare dintre tabelele care
vor fi incluse în aceasta sau înainte de a efectua orice operaţii folosind conţinutul acelor tabele.
Pentru ca baza de date samp_db să devină curentă trebuie sa folosiți instrucţiunea USE:
mysql> USE samp_db
USE este una dintre puţinele instrucţiuni care nu necesită un caracter punct şi virgulă de
terminare a instrucţiunii, deşi îl puteţi adăuga, dacă doriţi.
6.1. Crearea tabelelor
Pentru evidenţiere modului de creare a tabelelor in mysql, vom folosi cazul bazei de
date pentru un catalog cu note ale unor elevi. Pentru a vedea care sunt tabelele de
care avem nevoie pentru proiectul de evidenţă a rezultatelor şcolare, să examinăm
modul în care se pot scrie punctajele atunci când folosiţi un catalog pe hârtie.
Tip chestionar-test
Data examinare
nume
Punctaj obţinut
Redundanţa datelor
O cerinţă impusă tabelului eveniment este aceea ca datele să fie unice, deoarece data
este folosită pentru a corela înregistrările din tabelele puncte şi eveniment. Cu alte
cuvinte, nu puteţi da două chestionare în aceeaşi zi, respectiv un chestionar şi un test.
Dacă o faceţi, veţi avea două seturi de înregistrări în tabelul puncte şi două înregistrări
în tabelul eveniment, toate cu aceeaşi dată, şi nu veţi mai putea stabili o corespondenţă
între înregistrările din cele două tabele.
Instrucţiunea CREATE TABLE pentru tabelul elev arată astfel:
Instrucţiunea CREATE TABLE creează un tabel denumit elev cu trei coloane: Nume, Sex şi Id_elev.
Nume este o coloană şir de lungime variabilă, care poate conţine maximum 20 de caractere.
Sex determină dacă un elev este băiat sau fată. Este o coloană de tip ENUM (enumerare), ceea ce
înseamnă că poate lua numai una din valorile enumerate explicit în specificaţia coloanei, în speţă M sau
F, adică de sex masculin sau feminin. ENUM este util dacă există un set limitat de valori pe care le poate
conţine o coloană. Se putea folosi CHAR(1), dar ENUM specifică mai exact care pot fi valorile din
coloană. Valorile dintr-o coloană ENUM nu trebuie să fie neapărat compuse dintr-un singur caracter.
Coloana tip ar fi putut fi declarată astfel: ENUM (' feminin' , ' masculin ').
Id_elev este o coloană de tip întreg care va conţine numere unice de identificare a elevilor. Declaraţia
coloanei Id_elev are numeroase părţi, chiar dacă nu conţine decât numere:
• INT arată că în coloană sunt incluse numere întregi (valori fără parte fracţionară);
• UNSIGNED interzice utilizarea numerelor negative;
• NOT NULL înseamnă că valoarea coloanei trebuie completată;
• AUTO_INCREMENT este un atribut special în MySQL. MySQL generează automat un număr
unic cu o unitate mai mare decât valoarea maximă care se află în coloană la momentul respectiv.;
• PRIMARY KEY arată că acea coloană este indexată pentru căutări rapide şi că fiecare valoare
din coloană trebuie să fie unică. Aceasta ne împiedică să folosim din greşeală acelaşi identificator
de două ori, ceea ce este o proprietate necesară a numerelor de identificare a elevilor. (Nu numai
atât; MySQL impune ca fiecare coloană AUTO_INCREMENT să aibă un indice unic.)
Instrucţiunea CREATE TABLE pentru tabelul eveniment arată astfel:
Se presupune că valorile punctajelor sunt întotdeauna întregi. Dacă doriţi să permiteţi includerea
unor punctaje precum 58,5, care conţin o parte fracţionară, veţi folosi unul din tipurile de coloană cu
virgulă mobilă, precum FLOAT sau DECIMAL.
Coloanele Id_elev şi Eveniment_id sunt numere întregi și reprezintă elevul şi evenimentul
pentru care a fost acordat fiecare punctaj. Folosindu-le pentru a stabili legături între
tabelele elev şi eveniment, vom putea determina numele elevului şi data evenimentului.
De asemenea, am transformat combinaţia dintre cele două coloane într-o cheie primară
(PRIMARY KEY). Astfel, ne asigurăm că nu vom avea punctaje repetate pentru un elev la
un test sau chestionar dat. De asemenea, modificarea ulterioară a unui punctaj este mai
simplă. De exemplu, când un punctaj a fost introdus incorect, putem elimina înregistrarea veche
atunci când inserăm înregistrările noi, folosind instrucţiunea MySQL
REPLACE. Nu este necesar să folosim o instrucţiune DELETE combinată cu INSERT;
MySQL execută automat această operaţie.
Reţineţi unicitatea combinaţiei între coloanele Eveniment_id şi Id_elev. În tabelul puncte, nici o
valoare nu este intrinsec unică. Vor exista mai multe înregistrări de punctaje pentru fiecare valoare
Eveniment_id (câte una pentru fiecare elev), respectiv mai multe înregistrări pentru fiecare valoare
Id_elev (câte una pentru fiecare chestionar şi test).
Relaţionarea tabelelor în MySql este foarte importantă, iar pentru aceasta se foloseşte
ca linie distinctă în tabelul secundar o instrucţiune de forma:
Să începem să adăugăm rezultate folosind INSERT, o instrucţiune SQL pentru care specificaţi
tabelul în care doriţi să inseraţi un rând de date şi valorile care vor fi plasate în rândul respectiv.
Instrucţiunea INSERT are mai multe forme:
o Puteţi specifica valori pentru toate coloanele:
INSERT INTO nume_tabel VALUES (valoare 1, valoare2,....)
Versiunile MySQL începând de la 3.22.5 vă permit să inseraţi mai multe rânduri într-un tabel cu o
singură instrucţiune INSERT, prin specificarea mai multor liste de valori:
INSERT INTO nume_tabel VALUES (...),(...),...
Acest procedeu necesită introducerea de la tastatură a unei cantităţi mai reduse de text decât cea
impusă de mai multe instrucţiuni INSERT, iar execuţia sa de către server este mai eficientă.
o Puteţi denumi coloanele cărora doriţi să le atribuiţi valori, apoi enumeraţi valorile. Acest
procedeu este util când doriţi să creaţi o înregistrare pentru care numai câteva coloane
trebuie configurate iniţial.
INSERT INTO nume_tabel (nume_col1 ,nume_col2,...) VALUES (valoare1,valoare2,...)
De la MySQL 3.22.5, această formă a instrucţiunii INSERT permite de asemenea mai multe liste cu
valori (coloanele care nu sunt specificate în lista de coloane primesc o valoare prestabilită):
INSERT INTO elev (nume, sex) VALUES (“Marius“,”M”), (“Ioana”,”F”), (“Ionut”,”M”);
o De la MySQL 3.22.10, puteţi denumi coloanele şi valorile sub forma nume_coloana=valoare.
INSERT INTO nume_tabel SET nume_col1=valoare1, nume_col2-valoare2,...
INSERT INTO elev SET nume =“Marius“, sex=”M”;
Toate coloanele care nu sunt specificate în clauza SET primesc o valoare prestabilită.
Nu puteţi insera mai multe rânduri folosind această formă a instrucţiunii INSERT.
O altă metodă pentru încărcarea înregistrărilor într-un tabel este citirea valorilor datelor direct dintr-un
fişier. Puteţi încărca înregistrări în acest mod cu ajutorul instrucţiunii LOAD DATA sau cu utilitarul
mysqlimport. Instrucţiunea LOAD DATA se comportă ca un încărcător de mare capacitate, care citeşte
date dintr-un fişier. Folosiţi această instrucţiune din interiorul programului mysql:
LOAD DATA LOCAL INFILE “candidat.txt” INTO TABLE candidat;
Această instrucţiune citeşte conţinutul fişierului de date candidat.txt şi o trimite serverului, pentru a fi
încărcată în tabelul candidat.
6.3. Regăsirea informaţiilor
Instrucţiunea SELECT permite să regăsiţi şi să afişaţi informaţii din tabelele
dumneavoastră, într-o manieră oricât de generală sau de specifică doriţi. Puteţi afişa
întregul conţinut al unui tabel:
SELECT * FROM elev
sau puteţi selecta o singură coloană a unui singur rând:
SELECT punctaj FROM puncte WHERE nume = “85"
Când folosiţi o clauză FROM pentru a specifica un tabel de unde vor fi regăsite datele, forma cea
mai „generică" a instrucţiunii SELECT este aceea prin care se regăsesc toate datele. Pentru
aceasta, folosiţi caracterul *, care este o abreviere de la „toate coloanele". Interogarea următoare
regăseşte toate rândurile din tabelul elev şi le afişează.
Dacă precizaţi mai mult de o coloană, separaţi numele
coloanelor prin virgule. Instrucţiunea următoare este
echivalentă cu SELECT * FROM elev, dar fiecare
coloană este specificată în mod explicit:
Puteţi denumi în mod explicit coloana sau
coloanele pe care doriţi să le vedeţi. Pentru a
selecta numai numele elevilor, procedaţi
astfel:
Pentru a efectua căutări ale valorilor NULL, trebuie să folosiţi o sintaxă specială. în loc de a folosi =
sau ! = pentru a testa egalitatea sau inegalitatea, folosiţi IS NULL sau IS NOT NULL.
De asemenea, LIMIT vă permite să extrageţi o secţiune de înregistrări din mijlocul unui set de rezultate.
Pentru aceasta, trebuie să specificaţi două valori. Prima valoare este numărul înregistrării iniţiale din
setul de rezultate pe care doriţi să-l vedeţi. (Prima înregistrare este numerotată cu 0, nu 1.) Cea de-a
doua valoare indică numărul de înregistrări care vor fi returnate. Interogarea următoare este similară cu
precedenta, care returnează cinci înregistrări, începând de la al treilea rând al rezultatului:
Calculul şi denumirea valorilor din coloanele de ieşire
Când folosiţi o expresie pentru a calcula valoarea unei coloane, expresia este folosită
pentru antetul coloanei. Aceasta poate duce la o coloană foarte lată, dacă expresia este lungă (aşa cum o
arată interogarea precedentă). Pentru a rezolva problema, capului de coloană i se poate atribui un nume,
folosind construcţia AS nume. Asemenea nume se numesc alias-uri de coloană. Rezultatul interogării
anterioare poate deveni astfel mai semnificativ:
Lucrul cu date calendaristice
Principalul aspect pe care trebuie să-l reţineţi atunci când lucraţi cu date în MySQL este că
acestea sunt întotdeauna reprezentate începând cu anul. Data de 27 noiembrie 2015 este
reprezentată sub forma “2015-11-27". Datele nu se scriu nici sub forma “11-27-2015" şi nici sub forma
“27-11-2015“.
MySQL oferă numeroase moduri de efectuare a operaţiilor cu date. Unele dintre acestea
sunt următoarele:
Sortare după dată.
Căutarea unei anumite date sau a unui domeniu de date.
Extragerea unei părţi dintr-o valoare de tip dată, precum anul, luna sau ziua.
Calcularea diferenţei între date.
Calcularea unei date prin adunarea sau scăderea unui interval dintr-o altă dată.
Pentru a căuta anumite date, fie în funcţie de valoarea exactă, fie prin comparaţie cu o
altă valoare, comparaţi o coloană DATA cu valoarea care vă interesează:
Pentru a testa sau pentru a regăsi părţi ale datelor calendaristice, puteţi folosi funcţii
precum YEAR() (an), MONTH() (lună) sau DAYOFMONTH() (ziua din lună). De
exemplu, puteti găsi candidatii care s-au născut în aceeaşi lună (martie) căutând
datele a căror valoare a lunii este egală cu 3:
Acest model corespunde numelor de familie care conţin litera R sau r oriunde în interiorul numelui:
Acest model corespunde prenumelor care conţin exact sase caractere:
Generarea de sumare
Una dintre cele mai utile operaţii pe care MySQL le poate face pentru
dumneavoastră este să rezume mari cantităţi de date brute şi să realizeze
sumarul acestora. MySQL devine un aliat puternic atunci când veţi învăţa să-l
folosiţi pentru a genera sumare, deoarece aceasta este o activitate extrem de
obositoare, consumatoare de timp şi supusă la erori atunci când este
efectuată manual.
O altă formă de realizare a unui sumar este numărarea, folosind funcţia COUNT (). Dacă folosiţi COUNT(*),
aceasta vă indică numărul de rânduri selectat de interogarea dumneavoastră. Dacă interogarea nu are
nici o clauză WHERE, COUNT(*) vă indică numărul rândurilor din tabelul dumneavoastră.
COUNT() poate fi combinată cu ORDER BY şi LIMIT.
Există funcţii de sumar altele decât C0UNT(). Funcţiile MIN(), MAX(), SUM() şi AVG() sunt utile
pentru determinarea valorii minime, maxime, totale şi medii dintr-o coloană
PHP și MySQL
Baza de date poate fi foarte ușor exploatată prin intermediul limbajului
PHP, dar şi cu alte limbaje (de exemplu Java).
Pentru interacțiunea cu baza de date sunt necesari cinci pași:
• se creează o conexiunea la sistemul de baze de date
• se selectează o bază de date
• se execută o instrucțiune SQL
• se folosesc datele întoarse
• se închide conexiunea.
Script MySQL:
Exemplu PHP și MySQL
Introducere
• Limbajul PHP este unul dintre cele mai importante limbaje de programare web, codul sursă
este public, fiind accesibil tuturor şi server-side (rularea sa nu se face pe calculatorul celui care
vizualizează pagina, ci pe server-ul care o conţine).
• PHP este prescurtarea de la Hypertext PreProcessor. Limbajul a fost început în 1994 ca o
extensie a limbajului server-side Perl, şi apoi ca o serie de CGI-uri compilate, de către Rasmus
Lerdorf, pentru a genera un curriculum vitae şi pentru a urmări numărul de vizitatori ai unui site.
A evoluat apoi în PHP/FI 2.0, dar proiectul open-source a început să ia amploare după ce Zeev
Suraski şi Andi Gutmans au lansat o nouă versiune a interpretorului PHP în vara anului 1998,
această versiune primind numele de PHP 3.0. Tot ei au schimbat numele în acronimul amintit
mai sus, până atunci PHP-ul fiind cunoscut ca „Personal Home Page tools”.
• În prezent este utilizată versiunea 6 a acestui limbaj.
• Spre deosebire de paginile HTML, care puteau fi verificate și pe calculatorul local, paginile
PHP nu pot fi verificate decât dacă sunt gazduite pe un server web care are instalat PHP.
• Când accesăm o pagina HTML serverul care o găzduiește trimite pagina HTML către browser
spre afișare. În cazul unei pagini PHP serverul citește codul PHP, îl interpretează și generează
dinamic pagina HTML care este trimisă browserului spre afișare. Acesta este motivul pentru
care utilizatorii folosesc PHP pentru construirea unor pagini cu conținut dinamic.
Introducere
• Limbajul PHP, în marea majoritate a cazurilor, se foloseşte sub formă de secvenţe de cod inserate
în cadrul unui document HTML.
• Structura unui script PHP este foarte asemănătoare cu cea a unui cod scris în limbajul C, mai
ales în sensul în care structurile de programare au aceeaşi sintaxă şi aceeaşi funcţionalitate.
• Rolurile de bază ale unui script PHP constau în aceea că script-ul poate prelua date trimise de
către o pagină web de la un client (în general, datele pot fi trimise de către o pagină web prin
intermediul formularelor) şi de a executa o secvenţă de program în urma căreia va rezulta un cod
HTML, cod pe care clientul îl va primi sub forma unei pagini web.
• Clientul nu va avea acces la codul efectiv al script-ului, ci, prin faptul că acesta se află pe server
şi se rulează tot pe acesta, va primi direct HTML-ul generat de script.
• Scriptul PHP este inserat între tag-urile : „<?php” şi „?>”.
• Instrucţiunea „echo” cuprinsă între acestea este o instrucţiune specifică limbajului PHP, ea
având rolul de a scrie în pagina web textul ce urmează după, cel cuprins între ghilimele.
• Un fişier ce conţine script-uri PHP se salvează de regulă cu extensia .php.
• Separatorul dintre instrucţiunile unui script .php este caracterul ”;”.
• În mod implicit limbajul PHP nu este case-sensitive (deci nu face diferenţa între literele mari şi
cele mici) în ceea ce priveşte cuvintele rezervate ale limbajului (instrucţiunile) respectiv funcţiile (fie
că e vorba de cele predefinite ale limbajului, fie că e vorba de cele definite de către utilizator).
• Este case-sensitive în ceea ce priveşte numele de variabile.
Constante
Exemplu:
<?php
define("pi",314e-2);// am definit o constanta numerica reala
define("greeting","Buna ziua!");//o constanta de tip sir de caractere
echo greeting,"<br>";// afisam constanta sir de caractere
echo "Constanta pi, aproximata cu 2 zecimale este ",pi;//iar aici pe cea numerica
?>
Variabile
• while(expresie) instrucţiune;
Exemplu 3: FOR
• for(expresie_iniţializare;expresie_continuare;expresie_incrementare) instrucţiune;
Exemplu 4: CONTINUE și BREAK
Exemplu 5
Exemplu 6: SIRURI
Exemplu 7
Exemplu 8
Exemplu 9: ARRAY
Exemplu 10
Exemplu 11
Exemplu 12: FUNCTII
Bibliografie:
1. http://www.w3schools.com/
2. Paul DuBois - MySQL (5th Edition) (Developer's Library)
3. Curs PHP - http://www.seap.usv.ro/
Vă mulțumesc pentru atenție !