pl sql transactions commit
Aflați despre tranzacțiile PL SQL cu exemple de instrucțiuni COMMIT, ROLLBACK și SAVEPOINTS:
În acest articol, vom continua cu Seria PL / SQL . În Pachet PL SQL tutorial, am aflat despre pachet, avantajele, specificațiile și structura acestuia.
Aici vom explora tranzacțiile PL SQL și caracteristicile acestora. Vom discuta câteva declarații PL / SQL, cum ar fi COMMIT, ROLLBACK, SAVEPOINTS și așa mai departe, care sunt legate de tranzacțiile PL SQL.
De asemenea, vom afla despre instrucțiunile LOCK TABLe și AUTOCOMMIT în PL SQL.
Să începem cu discuția !!
Ce veți învăța:
PL SQL Tranzacții
O componentă atomică de lucru într-o bază de date care are mai multe instrucțiuni SQL se numește tranzacție. Este denumit atomic, deoarece odată ce există modificări afectate de instrucțiunile SQL, acestea pot fi fie comise [actualizări nedeterminate ale bazei de date], fie anulate [anulează actualizările bazei de date].
O instrucțiune SQL trebuie să fie angajată altfel poate fi anulată și toate modificările pe care trebuia să le facă instrucțiunea SQL rămân anulate. Dacă programul PL / SQL este oprit în mijlocul tranzacției, nu există niciun impact asupra bazei de date și se restabilește la starea sa inițială.
COMMIT și ROLLBACK au grijă de faptul că modificările aduse bazei de date sunt fie veșnice, fie anulate. Instrucțiunea SAVEPOINT indică poziția actuală în procesarea tranzacției.
Porniți procesarea tranzacțiilor
Fiecare tranzacție are un început și o încheiere.
Următoarele incidente marchează începutul unei tranzacții:
- După conectarea la baza de date, se execută prima instrucțiune SQL.
- O nouă instrucțiune SQL este executată după finalizarea instrucțiunii SQL anterioare.
Încheierea procesării tranzacțiilor
Fiecare program PL / SQL ar trebui să aibă o instrucțiune COMMIT sau ROLLBACK. Depinde doar de logica de programare dacă ar trebui să folosim un COMMIT sau un ROLLBACK după tranzacție.
Dacă instrucțiunile COMMIT sau ROLLBACK nu sunt utilizate, depinde de mediul gazdă cum ar trebui să fie starea finală a bazei de date. De exemplu, într-un mediu SQL * PLUS, dacă un bloc de cod PL / SQL nu are o instrucțiune COMMIT sau ROLLBACK, starea bazei de date va depinde de blocul de cod care se execută imediat după aceea.
Într-un mediu Oracle, dacă includem o instrucțiune COMMIT sau executăm comanda DISCONNECT, EXIT sau QUIT după executarea unei interogări de definire a datelor sau de control al datelor, tranzacția este angajată. De asemenea, dacă includem o declarație ROLLBACK, tranzacția este anulată.
Astfel, o tranzacție poate fi încheiată din cauza oricăror scenarii de mai jos:
- Se execută o instrucțiune ROLLBACK sau COMMIT.
- O interogare DDL [ de exemplu, se execută o declarație de creare a tabelului], după care COMMIT este rulat în mod implicit.
- O interogare DCL [ de exemplu, se execută o instrucțiune GRANT], după care COMMIT este rulat implicit.
- Utilizatorul termină conexiunea la baza de date.
- Utilizatorul execută declarația EXIT pentru a ieși din SQL * PLUS, după care se execută implicit COMMIT.
- SQL * PLUS întâmpină o terminare neobișnuită, după care ROLLBACK este executat în mod implicit.
- O interogare DML nu rulează cu succes, după care ROLLBACK este rulat în mod implicit pentru a readuce baza de date la starea sa inițială.
COMITETUL Pentru schimbări permanente
Declarația COMMIT este capabilă să încheie tranzacția prezentă și să facă o modificare permanentă, așa cum este efectuată de tranzacție. Odată ce COMMIT este executat, putem obține datele modificate.
Pe măsură ce declarația COMMIT este executată, toate rândurile afectate ale tabelului sunt eliberate din blocări. De asemenea, ne ajută să scăpăm de SAVEPOINT. O declarație COMMIT poate fi însoțită opțional de o instrucțiune WORK [COMMIT WORK] care este adăugată doar pentru a îmbunătăți lizibilitatea codului.
În cazul în care o tranzacție eșuează în momentul COMMIT și starea tranzacției nu este cunoscută, la acel moment textul COMENTAR din codul PL / SQL este stocat într-un dicționar de date împreună cu ID-ul tranzacției.
Sintaxa pentru tranzacția COMMIT:
COMMIT;
Să luăm în considerare un tabel numit PROFESORI.
Am creat tabelul PROFESORILOR cu ajutorul declarației SQL de mai jos:
CREATE TABLE TEACHERS ( CODE INT NOT NULL, SUBJECT VARCHAR (15) NOT NULL, NAME VARCHAR (15) NOT NULL, PRIMARY KEY (CODE) );
Introduceți valori în acest tabel și apoi comiteți tranzacția în felul următor:
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM'); INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM'); INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK'); COMMIT;
Apoi, se execută interogarea de mai jos:
SELECT * FROM TEACHERS;
Ieșire:
RETURNARE Pentru a anula modificările
Dacă o tranzacție prezentă este încheiată cu o declarație ROLLBACK, atunci va anula toate modificările care ar trebui să aibă loc în tranzacție.
O declarație ROLLBACK are următoarele caracteristici, enumerate mai jos:
- Baza de date este restaurată cu starea sa originală cu o instrucțiune ROLLBACK în cazul în care am șters din greșeală un rând important din tabel.
- În cazul unei excepții care a dus la eșecul executării unei instrucțiuni SQL, o instrucțiune ROLLBACK ne permite să trecem la punctul de plecare al programului de unde putem lua măsuri de remediere.
- Actualizările făcute la baza de date fără o declarație COMMIT pot fi revocate cu o instrucțiune ROLLBACK.
Sintaxa pentru ROLLBACK a tranzacției:
ROLLBACK;
Sintaxă pentru tranzacția ROLLBACK cu SAVEPOINT:
ROLLBACK [TO SAVEPOINT ];
Aici salvați_n este numele SAVEPOINT.
Să luăm în considerare tabelul PROFESORILOR pe care l-am creat mai devreme.
Implementarea codului cu ROLLBACK:
DELETE FROM TEACHERS WHERE CODE= 3; ROLLBACK;
Apoi, se execută interogarea de mai jos:
SELECT * FROM TEACHERS;
Ieșirea codului de mai sus ar trebui să fie:
În codul de mai sus, am executat o instrucțiune DELETE care ar trebui să șteargă înregistrarea profesorului cu COD egal cu 3. Cu toate acestea, din cauza declarației ROLLBACK, nu există niciun impact asupra bazei de date și ștergerea nu se face.
SAVEPOINT Pentru a reveni la modificările parțiale
SAVEPOINT oferă numele și identificarea punctului actual de procesare a tranzacției. Este în general asociat cu o instrucțiune ROLLBACK. Ne permite să revenim la anumite secțiuni ale unei tranzacții, fără a atinge întreaga tranzacție.
Pe măsură ce aplicăm ROLLBACK la un SAVEPOINT, toate SAVEPOINTS-urile incluse după acel SAVEPOINT particular vor fi eliminate [adică dacă am marcat trei SAVEPOINTS și am aplicat un ROLLBACK la al doilea SAVEPOINT, automat al treilea SAVEPOINT va fi șters.]
O instrucțiune COMMIT sau ROLLBACK șterge toate SAVEPOINTS. Numele date SAVEPOINT sunt identificatori nedeclarați și pot fi reaplicate de mai multe ori în cadrul unei tranzacții. Există o mișcare a SAVEPOINT de la poziția veche la cea actuală în interiorul tranzacției.
O ROLLBACK aplicată unui SAVEPOINT afectează doar partea în curs a tranzacției. Astfel, un SAVEPOINT ajută la împărțirea unei tranzacții lungi în secțiuni mici prin poziționarea punctelor de validare.
Sintaxa tranzacției SAVEPOINT:
SAVEPOINT ;
Aici, salvați_n este numele SAVEPOINT.
Să luăm din nou în considerare tabelul PROFESORILOR pe care l-am creat mai devreme.
Implementarea codului ROLLBACK CU SAVEPOINT:
INSERT INTO TEACHERS VALUES (4, 'CYPRESS', 'MICHEAL'); SAVEPOINT s; INSERT INTO TEACHERS VALUES (5, 'PYTHON', 'STEVE'); INSERT INTO TEACHERS VALUES (6, 'PYTEST', 'ARNOLD'); ROLLBACK TO s; INSERT INTO TEACHERS VALUES (7, 'PROTRACTOR', 'FANNY'); COMMIT;
Apoi, se execută interogarea de mai jos:
SELECT * FROM TEACHERS;
Ieșirea codului de mai sus ar trebui să fie:
În codul de mai sus, după ROLLBACK cu SAVEPOINT s este aplicat, s-au inserat doar încă două rânduri, adică profesori cu COD 4 și respectiv 7. Vă rugăm să rețineți că profesorii cu codul 1, 2 și 3 au fost adăugați în timpul creării tabelului.
TABEL LOCK În PL / SQL
Instrucțiunea LOCK în PL / SQL permite blocarea bazei de date complete într-un mod de blocare. Acest lucru determină dacă dorim să partajăm sau să nu permitem accesul la masă.
Să luăm un exemplu de masă de blocare:
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
Interogarea de mai sus blochează tabelul PROFESORI în modul partajare rând. Un mod de partajare pe rând permite permisiunea pentru o utilizare simultană a unui tabel. Nu permite utilizatorilor să blocheze tabelul complet pentru utilizare individuală. După executarea unui COMMIT sau ROLLBACK, blocările tabelelor sunt eliberate. Cuvântul cheie NOWAIT este folosit pentru a menționa că baza de date nu are voie să aștepte eliberarea unei blocări.
Modul de blocare este important pentru a concluziona ce alte blocări pot fi aplicate unui tabel.
Să discutăm câteva moduri LOCK disponibile în PL / SQL:
Sl. Nu | MOD BLOCARE | SCOP |
---|---|---|
1 | ROW SHARE | Permite mai multor utilizatori să folosească masa simultan. Cu toate acestea, utilizatorii nu au voie să blocheze tabelul complet pentru utilizare exclusivă. |
Două | RÂND EXCLUSIV | Permite mai multor utilizatori să folosească masa simultan. Cu toate acestea, utilizatorii nu au voie să blocheze tabelul complet pentru utilizare exclusivă în modul de partajare. |
3 | DISTRIBUIRE ACTUALIZARE | Permite mai multor utilizatori să folosească masa simultan. Cu toate acestea, utilizatorii nu au voie să blocheze tabelul complet pentru utilizare exclusivă. |
4 | ACȚIUNE | Ne permite să executăm simultan mai multe interogări pe masă. Cu toate acestea, utilizatorii nu au voie să modifice tabelul blocat. |
5 | SHARE ROW EXCLUSIV | Permite utilizatorilor cu acces doar la citire la masă. Nu li se permite să modifice tabelul sau să blocheze masa în modul partajare. |
6 | EXCLUSIV | Permite executarea interogărilor numai pe tabelul blocat. |
Control automat al tranzacțiilor în PL / SQL
Putem face o configurație astfel încât o instrucțiune COMMIT să fie executată în mod implicit ori de câte ori se execută o instrucțiune INSERT sau DELETE. Acest lucru se face prin modificarea mediului AUTOCOMMIT la ON.
Sintaxă:
SET AUTOCOMMIT ON;
Din nou, acest lucru poate fi dezactivat prin modificarea mediului AUTOCOMMIT la OFF.
Sintaxă:
SET AUTOCOMMIT OFF;
Întrebări și răspunsuri frecvente
Q # 1) Care este tranzacția în PL SQL?
Răspuns: O tranzacție este un grup de instrucțiuni de calcul de date SQL care funcționează ca o unitate atomică. Toate tranzacțiile sunt de natură atomică, care sunt fie angajate, fie reversate.
Q # 2) Ce este COMMIT în PL SQL?
Răspuns: O declarație COMMIT este utilizată pentru a efectua o modificare permanentă a bazei de date prin tranzacția prezentă. Face modificarea bazei de date vizibilă pentru utilizatori.
Î # 3) Cum încheieți o tranzacție?
Răspuns: O tranzacție se încheie cu o declarație COMMIT sau ROLLBACK în mod explicit. De asemenea, poate fi încheiat necondiționat după executarea unei instrucțiuni DML.
Q # 4) Putem comite un declanșator?
întrebări și răspunsuri la interviu cu analistul de afaceri
Răspuns: Da, putem declanșa declanșarea numai dacă tranzacția de declanșare este independentă de tranzacția sa mamă.
Q # 5) SELECT este o tranzacție?
Răspuns: Da, SELECT este o tranzacție care are toate caracteristicile unei tranzacții.
Q # 6) Cum pot reveni la o tranzacție în Oracle?
Răspuns: Trebuie să rulăm o instrucțiune ROLLBACK pentru a reveni la o tranzacție în Oracle. Acesta va anula toate modificările efectuate de tranzacție în baza de date și va fi readus la starea inițială.
Concluzie
În acest tutorial, am discutat în detaliu câteva concepte de bază ale tranzacțiilor PL SQL care sunt esențiale pentru gestionarea tranzacțiilor PL SQL. Am abordat următoarele subiecte enumerate mai jos:
- Tranzacţie.
- Utilizarea COMMIT într-o tranzacție.
- Ce este un ROLLBACK într-o tranzacție?
- Utilizarea ROLLBACK cu SAVEPOINT într-o tranzacție.
- Masă LOCK.
Lectură recomandată
- Tutorial PL SQL pentru începători cu exemple | Ce este PL / SQL
- Dezvoltarea aplicației Oracle Database: Oracle SQL și PL / SQL
- Pachet PL SQL: Tutorial pachet Oracle PL / SQL cu exemple
- Diferența dintre SQL și MySQL împotriva SQL Server (cu exemple)
- Format SQL Datetime: Funcții de dată și oră în PL / SQL
- Ghid complet pentru gestionarea excepțiilor PL SQL cu exemple
- SQL vs NoSQL Diferențe exacte și știți când să utilizați NoSQL și SQL
- Tutorial Oracle Database - Ce este Oracle Database?