pl sql transactions commit
Dozviete sa viac o transakciách PL SQL s príkladmi príkazov COMMIT, ROLLBACK a SAVEPOINTS:
V tomto článku budeme pokračovať s Séria PL / SQL . V Balík PL SQL sme sa dozvedeli o balíku, jeho výhodách, špecifikáciách a štruktúre.
Tu preskúmame transakcie PL SQL a ich charakteristiky. Budeme diskutovať o niektorých príkazoch PL / SQL, ako sú COMMIT, ROLLBACK, SAVEPOINTS a podobne, ktoré súvisia s transakciami PL SQL.
Dozvieme sa tiež o príkazoch LOCK TABLe a AUTOCOMMIT v PL SQL.
Začnime diskusiou !!
Čo sa dozviete:
dvojnásobne prepojený zoznam v c ++
Transakcie PL SQL
Atómový komponent práce v databáze, ktorá obsahuje viac príkazov SQL, sa nazýva transakcia. Označuje sa ako atómová, pretože akonáhle dôjde k zmenám ovplyvneným príkazmi SQL, môžu byť buď potvrdené [neurčité aktualizácie databázy], alebo vrátené späť [vrátiť aktualizácie databázy späť].
Príkaz SQL je potrebné potvrdiť, inak ho možno vrátiť späť a všetky úpravy, ktoré mal príkaz SQL vykonať, zostanú vrátené. Ak sa program PL / SQL zastaví uprostred transakcie, nemá to žiadny dopad na databázu a obnoví sa do pôvodného stavu.
COMMIT a ROLLBACK sa starajú o to, aby zmeny v databáze boli buď večné, alebo vrátené späť. Príkaz SAVEPOINT ukazuje na súčasnú pozíciu v spracovaní transakcie.
Spustiť spracovanie transakcie
Každá transakcia má začiatok a ukončenie.
Nasledujúce incidenty označujú začiatok transakcie:
- Po pripojení k databáze sa vykoná prvý príkaz SQL.
- Nový príkaz SQL sa vykoná po dokončení predchádzajúceho príkazu SQL.
Ukončiť spracovanie transakcie
Každý program PL / SQL by mal mať príkaz COMMIT alebo ROLLBACK. Závisí iba od logiky programovania, či by sme mali po transakcii použiť COMMIT alebo ROLLBACK.
Pokiaľ sa nepoužívajú príkazy COMMIT alebo ROLLBACK, záleží na konečnom stave databázy, aký by mal byť konečný stav databázy. Napríklad, v prostredí SQL * PLUS, ak je blok kódu PL / SQL bez príkazu COMMIT alebo ROLLBACK, bude stav databázy závisieť od bloku kódu, ktorý sa vykoná hneď potom.
Ak v prostredí Oracle zahrnieme príkaz COMMIT alebo vykonáme príkaz DISCONNECT, EXIT alebo QUIT po vykonaní definície údajov alebo dotazu na kontrolu údajov, transakcia sa potvrdí. Ak zahrnieme aj príkaz ROLLBACK, transakcia sa vráti späť.
Transakciu je teda možné ukončiť z dôvodu nasledujúcich scenárov:
- Vykoná sa príkaz ROLLBACK alebo COMMIT.
- Dopyt DDL [ napríklad, vykoná sa vyhlásenie o vytvorení tabuľky], potom sa štandardne spustí COMMIT.
- Dopyt DCL [ napríklad, sa vykoná príkaz GRANT], po ktorom sa štandardne spustí COMMIT.
- Užívateľ ukončí pripojenie k databáze.
- Užívateľ spustí príkaz EXIT, aby vyšiel z SQL * PLUS, potom sa implicitne vykoná COMMIT.
- SQL * PLUS narazí na neobvyklé ukončenie, po ktorom sa štandardne vykoná ROLLBACK.
- Dotaz DML sa nespustí úspešne, potom sa štandardne spustí ROLLBACK, ktorý vráti databázu do pôvodného stavu.
ZÁVAZOK za trvalé zmeny
Príkaz COMMIT je schopný ukončiť súčasnú transakciu a vykonať trvalú úpravu vykonanú transakciou. Po vykonaní príkazu COMMIT môžeme získať upravené údaje.
Keď sa spustí príkaz COMMIT, všetky ovplyvnené riadky tabuľky sa uvoľnia zo zámkov. Pomáha nám tiež zbaviť sa SAVEPOINTU. Príkaz COMMIT môže byť voliteľne doplnený príkazom WORK [COMMIT WORK], ktorý je pridaný iba na zlepšenie čitateľnosti kódu.
V prípade, že transakcia zlyhá v čase COMMIT a stav transakcie nie je známy, v tom čase sa text COMMENT v kóde PL / SQL uloží do dátového slovníka spolu s ID transakcie.
Syntax transakcie COMMIT:
COMMIT;
Uvažujme o tabuľke s názvom UČITELIA.
Tabuľku UČITEĽOV sme vytvorili pomocou nižšie uvedeného príkazu SQL:
CREATE TABLE TEACHERS ( CODE INT NOT NULL, SUBJECT VARCHAR (15) NOT NULL, NAME VARCHAR (15) NOT NULL, PRIMARY KEY (CODE) );
Vložte hodnoty do tejto tabuľky a potom transakciu potvrďte nasledujúcim spôsobom:
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM'); INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM'); INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK'); COMMIT;
Ďalej sa vykoná nasledujúci dotaz:
SELECT * FROM TEACHERS;
Výkon:
ROLLBACK Ak chcete vrátiť zmeny späť
Ak je súčasná transakcia ukončená príkazom ROLLBACK, zrušia sa všetky úpravy, ktoré sa majú v transakcii uskutočniť.
Príkaz ROLLBACK má nasledujúce funkcie, ktoré sú uvedené nižšie:
- Databáza sa obnoví do pôvodného stavu pomocou príkazu ROLLBACK v prípade, že sme omylom vymazali dôležitý riadok z tabuľky.
- V prípade výnimky, ktorá viedla k zlyhaniu vykonania príkazu SQL, umožňuje príkaz ROLLBACK preskočiť na východiskový bod programu, odkiaľ môžeme prijať nápravné opatrenia.
- Aktualizácie vykonané v databáze bez príkazu COMMIT je možné odvolať pomocou príkazu ROLLBACK.
Syntax transakcie ROLLBACK:
ROLLBACK;
Syntax pre transakciu ROLLBACK so SAVEPOINT:
ROLLBACK [TO SAVEPOINT ];
Tu je save_n je názov SAVEPOINTU.
Zoberme do úvahy tabuľku UČITEĽOV, ktorú sme vytvorili predtým.
Implementácia kódu pomocou ROLLBACK:
DELETE FROM TEACHERS WHERE CODE= 3; ROLLBACK;
Ďalej sa vykoná nasledujúci dotaz:
SELECT * FROM TEACHERS;
Výstup z vyššie uvedeného kódu by mal byť:
Vo vyššie uvedenom kóde sme vykonali príkaz DELETE, ktorý má zmazať záznam učiteľa s CODE rovným 3. Kvôli príkazu ROLLBACK to však nemá žiadny dopad na databázu a mazanie sa nerobí.
SAVEPOINT na vrátenie čiastočných zmien
SAVEPOINT dáva meno a identifikáciu aktuálnemu bodu spracovania transakcie. Spravidla sa spája s vyhlásením ROLLBACK. Umožňuje nám to vrátiť niektoré časti transakcie tým, že sa nedotkneme celej transakcie.
Keď použijeme ROLLBACK na SAVEPOINT, odstránia sa všetky zahrnuté SAVEPOINTS nasledujúce po danom SAVEPOINTe [to znamená, že ak sme označili tri SAVEPOINTS a použili ROLLBACK na druhom SAVEPOINT, automaticky sa tretí SAVEPOINT vymaže.]
Príkaz COMMIT alebo ROLLBACK vymaže všetky SAVEPOINTS. Mená dané SAVEPOINT sú nedeklarované identifikátory a môžu byť v rámci transakcie použité niekoľkokrát. V transakcii dochádza k pohybu SAVEPOINTU zo starej do súčasnej polohy.
ROLLBACK aplikovaný na SAVEPOINT ovplyvňuje iba prebiehajúcu časť transakcie. Takto SAVEPOINT pomáha rozdeliť zdĺhavú transakciu na malé časti umiestnením overovacích bodov.
Syntax pre transakciu SAVEPOINT:
SAVEPOINT ;
Tu, save_n je názov SAVEPOINTU.
Zvážme znova tabuľku UČITEĽOV, ktorú sme vytvorili predtým.
Implementácia kódu ROLLBACK WITH 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;
Ďalej sa vykoná nasledujúci dotaz:
SELECT * FROM TEACHERS;
Výstup z vyššie uvedeného kódu by mal byť:
Vo vyššie uvedenom kóde po ROLLBACK so SAVEPOINT s sa vložili iba dva ďalšie riadky, t. j. učitelia s KÓDOM 4, respektíve 7. Upozorňujeme, že pri vytváraní tabuľky boli pridaní učitelia s kódom 1, 2 a 3.
LOCK tabuľka v PL / SQL
Príkaz LOCK v PL / SQL umožňuje uzamknutie celej databázy v uzamykacom režime. To určuje, či chceme zdieľať alebo zakázať prístup k tabuľke.
Zoberme si príklad tabuľky zámkov:
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
Vyššie uvedený dotaz uzamkne tabuľku UČITEĽOV v režime zdieľania riadkov. Režim zdieľania riadkov dáva povolenie na súčasné použitie tabuľky. Neumožňuje používateľom uzamknúť celú tabuľku na individuálne použitie. Po vykonaní príkazu COMMIT alebo ROLLBACK sa zámky tabuľky uvoľnia. Kľúčové slovo NOWAIT sa používa na označenie, že databáza nesmie čakať na uvoľnenie zámku.
Režim uzamknutia je dôležitý pre záver, aké ďalšie zámky je možné použiť na stôl.
Poďme diskutovať o niektorých LOCK režimoch dostupných v PL / SQL:
Sl. Nie | REŽIM ZÁMKU | ÚČEL |
---|---|---|
1 | RADOVÝ ZDIEĽAŤ | Umožňuje to viacerým používateľom používať tabuľku súčasne. Používatelia však nemôžu uzamknúť celú tabuľku na výlučné použitie. |
dva | RIADOK VÝLUČNÝ | Umožňuje to viacerým používateľom používať tabuľku súčasne. Používatelia však nemôžu v režime zdieľania uzamknúť celú tabuľku na výlučné použitie. |
3 | ZDIEĽAJTE AKTUALIZÁCIU | Umožňuje to viacerým používateľom používať tabuľku súčasne. Používatelia však nemôžu uzamknúť celú tabuľku na výlučné použitie. |
4 | ZDIEĽAM | Umožňuje nám to vykonávať viac dotazov na stole súčasne. Používatelia však nemôžu upravovať uzamknutú tabuľku. |
5 | ZDIEĽAJTE RIADOK EXKLUZÍVNE | Umožňuje používateľom prístup k tabuľke iba na čítanie. Nie je im dovolené upravovať stôl alebo ho uzamknúť v režime zdieľania. |
6 | EXKLUZÍVNE | Umožňuje iba vykonávanie dotazov na uzamknutej tabuľke. |
Automatická kontrola transakcií v PL / SQL
Môžeme urobiť konfiguráciu tak, aby sa príkaz COMMIT štandardne vykonal vždy, keď sa spustí príkaz INSERT alebo DELETE. To sa deje tak, že sa premenná prostredia AUTOCOMMIT nastaví na ZAPNUTÉ.
Syntax:
SET AUTOCOMMIT ON;
Toto je možné opäť vypnúť nastavením premennej prostredia AUTOCOMMIT na hodnotu OFF.
Syntax:
SET AUTOCOMMIT OFF;
Často kladené otázky a odpovede
Otázka 1) Aká je transakcia v PL SQL?
Odpoveď: Transakcia je skupina príkazov na výpočet údajov SQL, ktoré fungujú ako atómová jednotka. Všetky transakcie majú atómovú povahu, ktoré sú buď potvrdené, alebo vrátené späť.
Otázka č. 2) Čo je to COMMIT v PL SQL?
Odpoveď: Príkaz COMMIT sa používa na vykonanie trvalej zmeny v databáze aktuálnou transakciou. Zviditeľňuje úpravy v databáze.
Otázka č. 3) Ako ukončíte transakciu?
Odpoveď: Transakcia sa výslovne končí príkazom COMMIT alebo ROLLBACK. Môže sa tiež bezpodmienečne ukončiť po spustení príkazu DML.
Otázka č. 4) Môžeme spáchať spúšťač?
Odpoveď: Áno, spúšťač môžeme spáchať, iba ak je táto spúšťacia transakcia samostatná od nadradenej transakcie.
Otázka č. 5) Je SELECT transakcia?
Odpoveď: Áno, SELECT je transakcia, ktorá má všetky charakteristiky transakcie.
Otázka č. 6) Ako vrátim transakciu v Oracle?
Odpoveď: Na vrátenie transakcie v systéme Oracle musíme spustiť príkaz ROLLBACK. Vráti späť všetky zmeny, ktoré transakcia vykonala v databáze, a obnoví sa do pôvodného stavu.
Záver
V tomto tutoriáli sme podrobne rozobrali niektoré základné koncepty transakcií PL SQL, ktoré sú nevyhnutné pre správu transakcií PL SQL. Prebrali sme nasledujúce témy uvedené nižšie:
- Transakcia.
- Použitie ZÁVÄZKU v transakcii.
- Čo je ROLLBACK v transakcii?
- Použitie ROLLBACK so SAVEPOINT v transakcii.
- LOCK stolík.
Odporúčané čítanie
- Výukový program PL SQL pre začiatočníkov s príkladmi Čo je PL / SQL
- Vývoj databázových aplikácií Oracle: Oracle SQL a PL / SQL
- Balík PL SQL: Výukový program balíkov Oracle PL / SQL s príkladmi
- Rozdiel medzi serverom SQL Vs MySQL Vs SQL Server (s príkladmi)
- Formát PL SQL Datetime: Funkcie dátumu a času v PL / SQL
- Kompletný sprievodca spracovaním výnimiek PL SQL s príkladmi
- Presné rozdiely medzi programom SQL a NoSQL a informácia o tom, kedy používať NoSQL a SQL
- Výukový program Oracle Database - Čo je to Oracle Database?