O tranzacție SQL este o secvență de una sau mai multe operațiuni SQL (de ex.INSERT UPDATE DELETE) executate ca o singură unitate de lucru. Tranzacțiile asigură că fie toate operațiunile au succes, fie că niciuna nu este aplicată, menținând integritatea datelor.
Proprietățile cheie ale tranzacțiilor SQL: ACID
Integritatea tranzacțiilor SQL este guvernată de proprietățile ACID care garantează tranzacții de încredere în baza de date. Aceste patru proprietăți lucrează împreună pentru a garanta că baza de date rămâne consecventă și fiabilă.
- 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 efectuată, modificările acesteia rămân în vigoare chiar și în cazul unei defecțiuni a sistemului.
Comenzi de control al tranzacțiilor SQL
În comenzile de control al tranzacțiilor SQL gestionează executarea operațiunilor SQL asigurând integritatea și fiabilitatea tranzacțiilor cu bazele de date. Aceste comenzi ajută la gestionarea start commit-ului și rollback-ul modificărilor făcute în baza de date. Mai jos sunt comenzile cheie de control al tranzacțiilor în SQL explicate cu sintaxă și exemple pentru fiecare.
1. Comanda BEGIN TRANZACȚIA
TheBEGIN TRANSACTIONcomanda marchează începutul unei noi tranzacții. Toate instrucțiunile SQL care urmează această comandă vor face parte din aceeași tranzacție până la aCOMMIT sau ROLLBACK este întâlnită. Această comandă nu face nicio modificare în baza de date, doar începe tranzacția.
Sintaxă:
BEGIN TRANSACTION transaction_name ;Exemplu de tranzacție SQL cu un scenariu de transfer bancar
string.replaceall în java
Să ne uităm la un exemplu de transfer bancar între două conturi. This example demonstrates the usage of multiple queries in a single transaction.
BEGIN TRANSACTION;
-- Deduct 0 from Account A
UPDATE Accounts
SET Balance = Balance - 150
WHERE AccountID = 'A';
-- Add 0 to Account B
UPDATE Accounts
SET Balance = Balance + 150
WHERE AccountID = 'B';
-- Commit the transaction if both operations succeed
COMMIT;
Dacă apare vreo eroare, cum ar fi o problemă cuUPDATEinterogare pe care o puteți folosiROLLBACKpentru a anula toate modificările efectuate în timpul tranzacției:
ROLLBACK;Acest lucru asigură că sistemul nu ajunge într-o stare inconsistentă, cum ar fi deducerea banilor dintr-un cont fără a-i adăuga în altul.
BEGIN TRANSACTION TransferFunds;2. Comanda COMMIT
TheCOMMITcomanda este utilizată pentru a salva toate modificările făcute în timpul tranzacției curente în baza de date. Odată ce o tranzacție este efectuată, modificările sunt permanente.
Sintaxă:
COMMIT;Exemplu
Iată mostraStudenttabel care va fi folosit pentru a efectua operațiile din acest exemplu. Acest tabel conține detalii de bază ale elevilor, cum ar fi numele ID, vârsta și alte informații relevante care vor fi manipulate folosind diverse comenzi de control al tranzacțiilor.
Masa elevilorUrmează un exemplu care ar șterge acele înregistrări din tabel care au vârsta = 20 și apoi COMMIT modificările din baza de date.
DELETE FROM Student WHERE AGE = 20;
COMMIT;
Ieșire
ieșire3. Comanda ROLLBACK
TheROLLBACKcomanda este folosită pentru a anula toate modificările făcute în tranzacția curentă. Este utilizat atunci când apare o eroare sau când modificările dorite nu pot fi finalizate. Baza de date va reveni la starea în care era înainte de BEGIN TRANSACTION a fost executat.
Sintaxă:
ROLLBACK;Exemplu
Ștergeți acele înregistrări din tabel care au vârsta = 20 și apoi ROLLBACK modificările din baza de date. În acest caz, DELETE operațiunea este anulată și modificările aduse bazei de date nu sunt salvate.
DELETE FROM Student WHERE AGE = 20;
ROLLBACK;
Ieșire:
ieșire4. Comanda SAVEPOINT
OSAVEPOINTeste folosit pentru a crea un punct de control în cadrul unei tranzacții. Putem reveni la un anumeSAVEPOINTîn loc să anulați întreaga tranzacție. Acest lucru ne permite să anulăm o parte a tranzacției, mai degrabă decât intreaga tranzactie.
Sintaxă:
SAVEPOINT SAVEPOINT_NAME;Exemplu
SAVEPOINT SP1;
//Savepoint created.
DELETE FROM Student WHERE AGE = 20;
//deleted
SAVEPOINT SP2;
//Savepoint created.
Ieșire:
ieșireExplicaţie:
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. 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.
5. ROLLBACK LA SAVEPOINT
TheROLLBACK TO SAVEPOINTcomanda ne permite să derulăm înapoi tranzacția la un anumit punct de salvare, anulând efectiv modificările făcute după acel punct.
Sintaxă:
char la int
ROLLBACK TO SAVEPOINT SAVEPOINT_NAME;Exemplu
Ștergerea a avut loc, să presupunem că ne-am răzgândit și am decis să ROLLBACK la SAVEPOINT-ul pe care l-am identificat ca SP1, care este înainte de ștergere. Deci, în acest caz,DELETEoperațiunea este anulată și tranzacția este returnată la starea în care se afla laSP1punct de salvare.
ROLLBACK TO SP1;
//Rollback completed
Ieșire:
ieșire6. Eliberați comanda SAVEPOINT
Această comandă este folosită pentru a elimina un SAVEPOINT pe care l-am creat. Odată ce un SAVEPOINT a fost eliberat, nu mai putem folosi ROLLBACK comandă 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ă.
Sintaxă:
RELEASE SAVEPOINT SAVEPOINT_NAME;Exemplu
Odată ajuns punctul de salvareSP2este eliberat, nu mai putem reveni la el.
RELEASE SAVEPOINT SP2; -- Release the second savepoint.De ce să folosiți tranzacțiile în domeniul bancar?
În acest caz, fără tranzacție, riscați scenarii în care banii sunt deduși dintr-un cont, dar nu adăugați în celălalt, lăsând sistemul într-o stare inconsecventă. Tranzacțiile asigură evitarea unor astfel de probleme, garantând că ambele operațiuni reușesc sau eșuează împreună.
Tipuri de tranzacții SQL
Există diferite tipuri de tranzacții în funcție de natura lor și de operațiunile specifice pe care le efectuează:
- Citiți Tranzacții : Folosit doar pentru a citi datele de obicei cu
SELECTinterogări. - Scrie tranzacții : Acestea presupun modificarea datelor din baza de date cu
INSERTUPDATEsauDELETEoperațiuni. - Tranzacții distribuite : Aceste tranzacții acoperă mai multe baze de date și asigură coerența între ele.
- Tranzacții implicite : Pornit automat de SQL Server pentru anumite operațiuni.
- Tranzacții explicite : Tranzacții controlate manual în care utilizatorul începe și încheie tranzacția folosind
BEGIN TRANSACTIONCOMMITşiROLLBACK.
Monitorizarea și optimizarea tranzacțiilor SQL
Pentru a menține performanța și a preveni problemele, luați în considerare următoarele tehnici:
1. Încuietori monitor : Urmăriți comportamentul de blocare și ajustați interogările pentru a minimiza conflictele de blocare.
2. Limitarea domeniului de aplicare al tranzacției : Limitați numărul de rânduri sau înregistrări afectate de o tranzacție pentru a accelera procesarea.
3. Utilizați Procesare în lot : Dacă manipulați cantități mari de date, împărțiți operațiunile în tranzacții sau loturi mai mici pentru a evita copleșirea sistemului.
Test sugerat Editați testul 5 întrebăriCare dintre următoarele scenarii descrie cel mai bine o încălcare a proprietății „Izolare” din ACID?
- O
O tranzacție lasă baza de date într-o stare care încalcă o constrângere a cheii primare.
- B
Două tranzacții care rulează simultan citesc și scriu pe aceleași date, ducând la rezultate inconsecvente.
- C
Un utilizator actualizează cu succes o înregistrare, dar o blocare a sistemului șterge modificarea.
- D
O tranzacție eșuează la jumătatea drumului și toate modificările acesteia sunt anulate.
Acesta este un exemplu clasic de încălcare a izolării în care starea intermediară a unei tranzacții este vizibilă pentru alta.
Într-o aplicație bancară, un transfer de fond presupune debitarea unui cont și creditarea altuia. Care proprietate ACID asigură că ambele operațiuni sunt finalizate sau niciuna nu o face?
- O
Izolare
- B
Atomicitatea
- C
Durabilitate
- D
Consecvență
Atomicitatea asigură că toate operațiunile din cadrul unei tranzacții sunt finalizate cu succes; în caz contrar, întreaga tranzacție este anulată.
Se execută o tranzacție și se emite un „COMMIT”. Imediat după ce apare o întrerupere de curent. Care proprietate ACID garantează că modificările efectuate prin tranzacție sunt încă prezente după repornirea sistemului?
- O
Consecvență
- B
Atomicitatea
- C
Durabilitate
- D
Izolare
Durabilitatea este proprietatea care asigură că, odată ce o tranzacție a fost efectuată, aceasta va rămâne așa chiar și în cazul unei pierderi de energie sau al unui blocaj al sistemului.
Care este scopul principal al comenzii „SAVEPOINT” într-o tranzacție?
- O
Pentru a angaja o parte a tranzacției.
- B
Pentru a marca un punct dintr-o tranzacție la care puteți reveni ulterior.
- C
Pentru a salva permanent starea tranzacției.
- D
Pentru a încheia tranzacția și a face toate modificările permanente.
poştaş
„SAVEPOINT” permite derulări parțiale în cadrul unei tranzacții.
Luați în considerare următoarea tranzacție: „START TRANZACȚIA; INSERT ...; SAVEPOINT A; UPDATE ...; PUNCT DE SALVARE B; ȘTERGE ...; ROLLBACK LA PUNTUL DE SALVARE A;' Care este starea tranzacției după comanda „ROLLBACK”?
- O
Întreaga tranzacție este anulată.
- B
Numai „ȘTERGEREA” este anulată.
- C
Apare o eroare deoarece nu puteți reveni la un punct de salvare care nu este cel mai recent.
- D
„INSERT” este salvat, dar „UPDATE” și „DELETE” sunt anulate.
Revenirea la „SAVEPOINT A” anulează toate modificările făcute după acel punct de salvare, care sunt „UPDATE” și „DELETE”.
Test completat cu succes Scorul dvs.: 2/5Precizie: 0%Conectați-vă pentru a vizualiza explicația 1/5 1/5 < Previous Următorul >