www.Horicul.3x.ro




Tutorial MySQL


BackSTART

Tranzactii. Blocarea/deblocarea unei tabele.

Pentru ca mai multi clienti sa poata accesa o tabela in acelasi timp (concurent), este necesara implementarea unui sistem de partajare a informatiilor.

In multe situatii este de asemenea necesar sa se asigure "atomicitatea" unui set de operatii. Acest lucru permite executia in totalitate a tuturor operatiilor din set intr-un singur pas, ca si cand ar fi vorba de o singura operatie.

Notiunea de tranzactie se refera tocmai la asigurarea executiei unui set de operatii ca un tot unitar. O tranzactie asigura fie ca se executa toate operatiile, fie ca nu se executa nici una.Dezvoltatorii sistemului MySQL au decis sa nu implementeze direct un sistem de tranzactii din motive de performanta. In schimb, s-a implementat o alta paradigma care se refera la integritatea datelor si anume "operatiile atomice". Pe de alta parte, datorita raspandirii utilizarii sitemului MySQL, exista planuri de a introduce in versiunile viitoare si un sistem tranzactional, astfel incat utilizatorul sa poata alege intre operatii atomice sau tanzactii.

Pe de alta parte, functie de tipul de operatii efectuate, datele vor trebui sau nu blocate pentru a asigura accesul exclusiv al unui client. Blocarea datelor in general este necesara daca se doreste o scriere sau o modificare a lor care ar afecta rularea altor clienti pentru aplicatii sensibile cum ar fi gestiunea bancara sau e-comerce.

Pentru a bloca accesul altora asupra unei tabele,MySQL pune la dispozitie comanda LOCK care are urmatoarea sintaxa:

LOCK TABLES nume_tabela [ AS alias]
{READ | WRITE}
[, nume_tabela {READ | WRITE} ...]

Corespunzator, exista si opusa ei, si anume comanda UNLOCK:

UNLOCK TABLES

Parametrii comenzii LOCK au urmatorea semnificatie:

Comanda UNLOCK nu are parametrii si deblocheaza automat toate tabelele blocate de clientul curent.

Cand se decide folosirea comezii LOCK trebuie avuta in vedere blocarea tuturor tabelelor care vor fi prelucrate.

Pentru a simula o tranzactie se poate folosi secventa:

  1. Se blocheaza tabelele care fac parte din tranzactie utilizand comanda LOCK TABLES.
  2. Se testeaza conditiile de integritate.
  3. Se insereaza/modifica datele, daca totul a fost ok la testare.
  4. Se deblocheaza tabelele utilizand comanda UNLOCK TABLES.

BackSTART