Bd 2 (neterminat) de 10 octa

Dar este mai bine să faceți acest lucru fără declanșatori, implementând logica procesării datelor prin proceduri.

Tranzacții și împărtășirea conflictelor

La începutul paragrafului "Proceduri stocate", a fost dat un exemplu de actualizări de tabelă "cu mai multe etaje" care implementează o acțiune elementară (indivizibilă) din punctul de vedere al utilizatorului. Secvența comenzilor SQL care execută această acțiune nu poate fi întreruptă în mijloc - aceasta va duce la o stare de date incorectă.







Un bloc de operațiuni care fie trebuie executat de toți, fie nici unul dintre ele nu este executat, se numește o tranzacție. Dacă o operațiune în timpul tranzacției nu poate fi executată sau duce la o eroare, ar trebui să anulați toate modificările de date care au avut loc de la începutul tranzacției și să returnați baza de date la starea pe care o avea la momentul inițierii acestei tranzacții. Anularea modificărilor se numește răsturnare. Dacă toate tranzacțiile au avut succes în timpul tranzacției, fără erori, tranzacția este comisă (comitere), după care nu mai puteți anula modificările.

La executarea tranzacțiilor, DBMS aderă la regulile de procesare a comenzilor formulate sub formă de cerințe ACID (conform literelor inițiale ale cerințelor):

Atomicitate - modificările aduse tranzacției vor fi îndeplinite sau nu vor fi executate deloc.

Consistență - datele din baza de date înainte și după tranzacție trebuie să fie într-o stare consecventă; În cadrul tranzacției, este posibilă o inconsecvență temporară. Consistența implică respectarea stării logice a datelor. De exemplu, există tabele pentru comenzi (Număr (PK), Data, AmountCash) și Comenzi pentru conținut (Număr comandă (FK), Cod de produs (FK), Preț, Cantitate). Întreaga procedură pentru emiterea unei noi comenzi este o tranzacție: mai întâi se adaugă o nouă linie la Ordin. cu această sumă de plată = 0. Apoi mărfurile sunt tipărite - mai multe linii sunt adăugate la conținutul comenzilor. Ultimul pas este calcularea sumei de plată. bazate pe conținutul ordinului. În acest exemplu, coerența datelor este ecuația SumsCare = = Prețul * Cantitatea de bunuri care intră în comandă. În timp ce mărfurile sunt adăugate la comandă, câmp Sum Sum of Payment = 0 - inconsistența temporară a datelor.







Izolarea - modificările efectuate de o singură tranzacție nu ar trebui să depindă de modificările efectuate de o altă tranzacție. Asta înseamnă că activitatea fiecărei tranzacții ar trebui să aibă loc ca și cum această tranzacție funcționează exclusiv cu baza de date. Ar trebui să vadă doar modificările pe care le-a făcut (și, de fapt, alte tranzacții pot actualiza aceleași date, dar DBMS-ul astfel "falsifică" datele din tabele, tranzacțiile văd doar modificările acestora).

Durabilitate - după stabilirea tranzacției, toate modificările efectuate sunt stocate în baza de date și nimic nu poate returna baza de date în starea pe care o avea înainte de începerea tranzacției.

În laborator, acțiunile "elementare" ale utilizatorului ar trebui să fie formalizate sub formă de tranzacții. Pe durata tranzacției poate fi împărțită în scurt (comenzi posledovatelnostSQL executate una după alta fără întârziere - în ordinea de microsecunde secunde) idlinnye sau de afaceri de tranzacție 1 (asociat cu speranța unei acțiuni de utilizator, cum ar fi adăugarea unui produs la comanda - poate durează un minut, ore și poate fi întrerupt din cauza unei eșecuri de comunicare).

Pentru tranzacțiile cu amănuntul:

în Firebird / Interbase nu este necesară nicio acțiune specială - fiecare procedură stocată este automat o tranzacție.

BEGIN TRAN NameTransactions

COMMIT TRAN NameTransactions







Trimiteți-le prietenilor: