logo

TRANZACȚII SQL

Tranzacțiile grupează un set de sarcini într-o singură unitate de execuție. Fiecare tranzacție începe cu un anumit loc de muncă și se termină atunci când toate sarcinile din grup sunt finalizate cu succes. Dacă oricare dintre sarcini eșuează, tranzacția eșuează. Prin urmare, o tranzacție are doar două rezultate: succes sau eșec .

Exemplu de tranzacție pentru a transfera 150 USD din contul A în contul B:

1. read(A) 2. A:= A – 150 3. write(A) 4. read(B) 5. B:= B + 150 6. write(B)>

Pașii incompleti duc la eșecul tranzacției. O tranzacție de bază de date, prin definiție, trebuie să fie atomică, consistentă, izolată și durabilă.
Acestea sunt cunoscute în mod popular ca ACID proprietăți. Aceste proprietăți pot asigura execuția concomitentă a mai multor tranzacții fără conflict.



Proprietățile tranzacției

  • Atomicitate: Rezultatul unei tranzacții poate fi fie complet de succes, fie complet nereușit. Întreaga tranzacție trebuie să fie anulată dacă o parte a eșuează.
  • Consecvență: Tranzacțiile mențin restricții de integritate prin mutarea bazei de date dintr-o stare validă în alta.
  • Izolare: Tranzacțiile concurente sunt izolate unele de altele, asigurând acuratețea datelor.
  • Durabilitate: Odată ce o tranzacție este comisă, modificările acesteia rămân în vigoare chiar și în cazul unei defecțiuni a sistemului.

Cum se implementează comanda de control al tranzacțiilor folosind SQL?

Următoarele comenzi sunt folosite pentru a controla tranzacțiile. Este important de reținut că aceste instrucțiuni nu pot fi utilizate în timpul creării tabelelor și sunt folosite doar cu comenzile DML, cum ar fi: INTRODUCE , ACTUALIZAȚI , și ȘTERGE .

Comanda BEGIN TRANSACTION

Indică punctul de început al unei tranzacții explicite sau locale.

Sintaxă:

BEGIN TRANSACTION nume_tranzacție ;

Comanda SET TRANSACTION

Valorile pentru proprietățile tranzacției curente, cum ar fi nivelul de izolare a tranzacției și modul de acces, sunt setate folosind instrucțiunea SET TRANSACTION din MySQL.

Sintaxă:

SETARE TRANZACȚIE [ CITEȘTE SCRIE | DOAR CITIȚI ];

Comanda COMMIT

Dacă totul este în ordine cu toate extrasele dintr-o singură tranzacție, toate modificările sunt înregistrate împreună în baza de date este apelată comise . Comanda COMMIT salvează toate tranzacțiile în baza de date de la ultima comandă COMMIT sau ROLLBACK.

Sintaxă:

string.replaceall în java

COMIT;

Exemplu:

Exemplu de tabel 1

ieșire

ieșire

Urmează un exemplu care ar șterge acele înregistrări din tabel care au vârsta = 20 și apoi COMMIT modificările din baza de date.

Interogare

DELETE FROM Student WHERE AGE = 20; COMMIT;>

Ieșire

Astfel, două rânduri din tabel ar fi șterse și instrucțiunea SELECT ar arăta ca,

ieșire

ieșire

Comanda ROLLBACK

Dacă apare vreo eroare cu oricare dintre instrucțiunile grupate SQL, toate modificările trebuie să fie anulate. Procesul de inversare a schimbărilor se numește rollback . Această comandă poate fi folosită numai pentru a anula tranzacții de când a fost lansată ultima comandă COMMIT sau ROLLBACK.

Sintaxa pentru comanda ROLLBACK:

char la int

ROLLBACK;

Exemplu:

Din exemplul de mai sus Exemplu de tabel 1 ,
Ștergeți acele înregistrări din tabel care au vârsta = 20 și apoi ROLLBACK modificările din baza de date.

Interogare

DELETE FROM Student WHERE AGE = 20; ROLLBACK;>

Ieșire

ieșire

ieșire

Comanda SAVEPOINT

PUNCT DE SALVARE creează puncte în cadrul grupurilor de tranzacții în care să ROLLBACK.
Un SAVEPOINT este un punct dintr-o tranzacție în care puteți rula tranzacția înapoi la un anumit punct fără a derula întreaga tranzacție.

Sintaxa pentru comanda Savepoint:

SAVEPOINT SAVEPOINT_NAME;

Această comandă este folosită numai la crearea SAVEPOINT printre toate tranzacțiile.
În general, ROLLBACK este folosit pentru a anula un grup de tranzacții.

Sintaxă pentru revenirea la comanda Savepoint:

ROLLBACK LA SAVEPOINT_NAME;

poştaş

puteți ROLLBACK la orice SAVEPOINT în orice moment pentru a readuce datele corespunzătoare la starea inițială.

Exemplu:

Din exemplul de mai sus Exemplu de tabel 1 , Ștergeți acele înregistrări din tabel care au vârsta = 20 și apoi ROLLBACK modificările din baza de date păstrând punctele de salvare.

Interogare

SAVEPOINT SP1; //Savepoint created. DELETE FROM Student WHERE AGE = 20; //deleted SAVEPOINT SP2; //Savepoint created.>

Aici SP1 este primul SAVEPOINT creat înainte de ștergere. În acest exemplu a avut loc o ștergere.
După ștergere din nou este creat SAVEPOINT SP2.

Ieșire

ieșire

ieșire

Ștergerea a avut loc, să presupunem că v-ați răzgândit și ați decis să ROLLBACK la SAVEPOINT-ul pe care l-ați identificat ca SP1, care este înainte de ștergere.
ștergerea este anulată de această declarație.

Interogare

ROLLBACK TO SP1; //Rollback completed>

Ieșire

ieșire

ieșire

Eliberați comanda SAVEPOINT

Această comandă este folosită pentru a elimina un SAVEPOINT pe care l-ați creat.

Sintaxă:

ELANSAȚI SAVEPOINT SAVEPOINT_NAME

Odată ce un SAVEPOINT a fost eliberat, nu mai puteți folosi comanda ROLLBACK pentru a anula tranzacțiile efectuate de la ultimul SAVEPOINT.
Este folosit pentru a iniția o tranzacție de bază de date și pentru a specifica caracteristicile tranzacției care urmează.

Concluzie

  • Instrucțiunile SQL sunt grupate împreună folosind tranzacții.
  • Ei promit că fie se fac toate modificările, fie că nu sunt deloc.
  • Fiabilitatea este asigurată de calitățile ACIDE de atomicitate, consistență, izolare și durabilitate.
  • Începeți o tranzacție cu BEGIN TRANSACTION și finalizați-o cu COMMIT sau ROLLBACK pentru a finaliza sau anula modificările.