pl sql transactions commit
Lær om PL SQL-transaktionerne med eksempler på COMMIT-, ROLLBACK- og SAVEPOINTS-udsagn:
I denne artikel vil vi fortsætte med PL / SQL-serien . I PL SQL-pakke tutorial, vi har lært om pakke, dens fordele, specifikationer og struktur.
Her vil vi undersøge PL SQL-transaktioner og deres egenskaber. Vi diskuterer nogle PL / SQL-udsagn som COMMIT, ROLLBACK, SAVEPOINTS og så videre, som er relateret til PL SQL-transaktioner.
Vi vil også lære om LOCK TABLe og AUTOCOMMIT udsagn i PL SQL.
Lad os begynde med diskussionen !!
Hvad du lærer:
PL SQL-transaktioner
En atomkomponent af arbejde i en database, der har flere SQL-udsagn kaldes en transaktion. Det kaldes atomisk, fordi når der er ændringer, der er påvirket af SQL-sætninger, kan de enten begås (ubestemte opdateringer til databasen) eller rulles tilbage (fortryd opdateringer til databasen).
En SQL-sætning skal begås, ellers kan den rulles tilbage, og alle de ændringer, som SQL-sætningen skulle gøre, fortrydes. Hvis PL / SQL-programmet stoppes midt i transaktionen, er der ingen indvirkning på databasen, og det gendannes til sin oprindelige tilstand.
COMMIT og ROLLBACK sørger for, at ændringerne i databasen enten er evige eller fortrydes. SAVEPOINT-erklæring peger på den nuværende position i transaktionsbehandling.
Start transaktionsbehandling
Hver transaktion har en start og en afslutning.
udefineret henvisning til funktion c ++
Følgende hændelser markerer en transaktion, der begynder:
- Efter forbindelsen til databasen udføres den første SQL-sætning.
- En ny SQL-sætning udføres, når den forrige SQL-sætning er afsluttet.
Afslut transaktionsbehandling
Hvert PL / SQL-program skal have en COMMIT- eller ROLLBACK-sætning. Det afhænger udelukkende af programmeringslogikken, om vi skal bruge en COMMIT eller en ROLLBACK efter transaktionen.
Hvis COMMIT- eller ROLLBACK-udsagn ikke bruges, afhænger det af værtsmiljøet, hvordan databasens endelige tilstand skal være. For eksempel, i et SQL * PLUS-miljø, hvis en PL / SQL-kodeblok er uden en COMMIT- eller ROLLBACK-sætning, vil databasens tilstand afhænge af den kodeblok, der udføres lige derefter.
I et Oracle-miljø, hvis vi inkluderer en COMMIT-erklæring eller udfører kommandoen DISCONNECT, EXIT eller QUIT efter at have kørt en datadefinition eller datakontrolforespørgsel, er transaktionen begået. Også, hvis vi inkluderer en ROLLBACK-erklæring, fortrydes transaktionen.
Således kan en transaktion afsluttes på grund af nedenstående scenarier:
- En ROLLBACK- eller COMMIT-erklæring udføres.
- En DDL-forespørgsel ( for eksempel, en tabeloprettelseserklæring) udføres, hvorefter COMMIT køres som standard.
- En DCL-forespørgsel ( for eksempel, en GRANT-sætning) udføres, hvorefter COMMIT køres som standard.
- Brugeren afslutter databaseforbindelsen.
- Bruger kører EXIT-sætningen for at komme ud af SQL * PLUS, hvorefter COMMIT udføres som standard.
- SQL * PLUS støder på en usædvanlig opsigelse, hvorefter ROLLBACK udføres som standard.
- En DML-forespørgsel kører ikke med succes, hvorefter ROLLBACK køres som standard for at bringe databasen tilbage til sin oprindelige tilstand.
FORPLIGTELSE FOR Permanente ændringer
COMMIT-erklæring er i stand til at afslutte den nuværende transaktion og foretage en permanent ændring som udført af transaktionen. Når COMMIT er udført, kan vi få fat i de modificerede data.
Når COMMIT-erklæringen køres, frigøres alle de berørte rækker i tabellen fra låse. Det hjælper os også med at slippe af med SAVEPOINT. En COMMIT-erklæring kan eventuelt ledsages af WORK-erklæring (COMMIT WORK), som kun tilføjes for at forbedre kodelæsbarheden.
I tilfælde af at en transaktion mislykkes på tidspunktet for COMMIT, og transaktionens tilstand ikke er kendt, lagres COMMENT-teksten i PL / SQL-koden på det tidspunkt i en dataordbog sammen med transaktionens id.
Syntaks for transaktion COMMIT:
COMMIT;
Lad os overveje en tabel med navnet LÆRERE.
Vi har oprettet tabellen LÆRERE ved hjælp af SQL-sætningen nedenfor:
CREATE TABLE TEACHERS ( CODE INT NOT NULL, SUBJECT VARCHAR (15) NOT NULL, NAME VARCHAR (15) NOT NULL, PRIMARY KEY (CODE) );
Indsæt værdier i denne tabel, og begiv derefter transaktionen på følgende måde:
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM'); INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM'); INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK'); COMMIT;
Derefter udføres nedenstående forespørgsel:
SELECT * FROM TEACHERS;
Produktion:
RULBACK For at fortryde ændringer
Hvis en nuværende transaktion afsluttes med en ROLLBACK-erklæring, fortryder den alle de ændringer, der formodes at finde sted i transaktionen.
En ROLLBACK-sætning har følgende funktioner som angivet nedenfor:
- Databasen gendannes med sin oprindelige tilstand med en ROLLBACK-sætning, hvis vi fejlagtigt har slettet en vigtig række fra tabellen.
- I tilfælde af en undtagelse, der har ført til udførelsen af en SQL-sætning, giver en ROLLBACK-sætning os mulighed for at springe til startpunktet for programmet, hvorfra vi kan træffe afhjælpende foranstaltninger.
- Opdateringerne til databasen uden en COMMIT-erklæring kan tilbagekaldes med en ROLLBACK-erklæring.
Syntaks for transaktion ROLLBACK:
ROLLBACK;
Syntaks for transaktion ROLLBACK med SAVEPOINT:
ROLLBACK (TO SAVEPOINT );
Her, den gemme_n er navnet på SAVEPOINT.
Lad os overveje tabellen LÆRERE, vi har oprettet tidligere.
Kodeimplementering med ROLLBACK:
DELETE FROM TEACHERS WHERE CODE= 3; ROLLBACK;
Derefter udføres nedenstående forespørgsel:
SELECT * FROM TEACHERS;
Output af ovenstående kode skal være:
I ovenstående kode har vi udført en DELETE-sætning, der formodes at slette lærerens post med CODE lig med 3. På grund af ROLLBACK-sætningen er der ingen indflydelse på databasen, og sletning sker ikke.
SAVEPOINT Til gendannelse af delvise ændringer
SAVEPOINT giver navn og identifikation til det nuværende transaktionsbehandlingspunkt. Det er generelt forbundet med en ROLLBACK-erklæring. Det giver os mulighed for at tilbageføre nogle dele af en transaktion ved ikke at berøre hele transaktionen.
Når vi anvender ROLLBACK på en SAVEPOINT, fjernes alle SAVEPOINTS, der følger efter den pågældende SAVEPOINT (det vil sige, hvis vi har markeret tre SAVEPOINT og anvendt en ROLLBACK på den anden SAVEPOINT, automatisk slettes den tredje SAVEPOINT.)
En COMMIT eller en ROLLBACK-sætning sletter alle SAVEPOINTS. Navnene givet til SAVEPOINT er sort angivne identifikatorer og kan genanvendes flere gange i en transaktion. Der er en bevægelse af SAVEPOINT fra den gamle til den nuværende position inde i transaktionen.
En ROLLBACK anvendt på en SAVEPOINT påvirker kun den igangværende del af transaktionen. Således hjælper en SAVEPOINT med at opdele en langvarig transaktion i små sektioner ved at placere valideringspunkter.
Syntaks for transaktion SAVEPOINT:
SAVEPOINT ;
Her, gemme_n er navnet på SAVEPOINT.
Lad os igen overveje tabellen LÆRERE, vi har oprettet tidligere.
Kodeimplementering af ROLLBACK MED 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;
Derefter udføres nedenstående forespørgsel:
SELECT * FROM TEACHERS;
Output af ovenstående kode skal være:
I ovenstående kode efter ROLLBACK med SAVEPOINT s anvendes, blev der kun indsat yderligere to rækker, dvs. lærere med henholdsvis CODE 4 og 7. Bemærk, at lærere med kode 1, 2 og 3 er blevet tilføjet under oprettelsen af tabellen.
LÅS-tabel i PL / SQL
LOCK-sætning i PL / SQL muliggør låsning af hele databasen i en låsetilstand. Dette bestemmer, om vi vil dele eller ikke tillade adgang til tabellen.
Lad os tage et eksempel på et låsebord:
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
Ovenstående forespørgsel låser tabellen LÆRERE i række-delingstilstand. En række-delingstilstand giver tilladelse til en samtidig brug af en tabel. Det tillader ikke brugere at låse hele bordet til individuel brug. Efter udførelsen af en COMMIT eller ROLLBACK frigøres bordlåsen. NOWAIT-nøgleordet bruges til at nævne, at databasen ikke har lov til at vente på, at en lås frigøres.
Låsetilstanden er vigtig for at konkludere, hvilke andre låse der kan anvendes på et bord.
Lad os diskutere nogle LOCK-tilstande, der er tilgængelige i PL / SQL:
Sl. Ingen | LÅSTILSTAND | FORMÅL |
---|---|---|
en | RADELING | Det giver flere brugere mulighed for at bruge tabellen samtidigt. Imidlertid har brugerne ikke lov til at låse hele tabellen til eksklusiv brug. |
to | RÅ EKSKLUSIV | Det giver flere brugere mulighed for at bruge tabellen samtidigt. Dog er brugerne ikke tilladt at låse hele tabellen til eksklusiv brug i delingstilstand. |
3 | DEL OPDATERING | Det giver flere brugere mulighed for at bruge tabellen samtidigt. Imidlertid har brugerne ikke lov til at låse hele tabellen til eksklusiv brug. |
4 | DEL | Det giver os mulighed for at udføre flere forespørgsler på bordet samtidigt. Imidlertid har brugerne ikke tilladelse til at ændre den låste tabel. |
5 | DEL RAKE EKSKLUSIV | Det giver brugere med skrivebeskyttet adgang til tabellen. De har ikke lov til at ændre bordet eller låse bordet i delingstilstand. |
6 | EKSKLUSIV | Det tillader kun udførelse af forespørgsler på den låste tabel. |
Automatisk transaktionskontrol i PL / SQL
Vi kan konfigurere sådan, at en COMMIT-sætning udføres som standard, hver gang en INSERT- eller DELETE-sætning køres. Dette gøres ved at gøre AUTOCOMMIT-miljøvariablen til ON.
Syntaks:
SET AUTOCOMMIT ON;
Igen kan dette slås fra ved at sætte miljøvariablen AUTOCOMMIT til OFF.
Syntaks:
SET AUTOCOMMIT OFF;
Ofte stillede spørgsmål og svar
Q # 1) Hvad er transaktionen i PL SQL?
Svar: En transaktion er en gruppe af SQL-dataregistreringserklæringer, der fungerer som en atomenhed. Alle transaktionerne er atomare, som enten er begået eller bakket op af ruller.
Spørgsmål nr. 2) Hvad er COMMIT i PL SQL?
Svar: En COMMIT-erklæring bruges til at foretage en permanent ændring af databasen ved den nuværende transaktion. Det gør ændringen af databasen synlig for brugerne.
Spørgsmål nr. 3) Hvordan afslutter du en transaktion?
Svar: En transaktion afsluttes med en COMMIT- eller ROLLBACK-erklæring eksplicit. Det kan også afsluttes ubetinget, efter at en DML-erklæring er kørt.
Spørgsmål nr. 4) Kan vi begå en trigger?
Svar: Ja, vi kan kun begå i trigger, hvis den trigger-transaktion er uafhængig af dens overordnede transaktion.
Q # 5) Er SELECT en transaktion?
Svar: Ja, SELECT er en transaktion, der har alle karakteristika ved en transaktion.
Spørgsmål nr. 6) Hvordan tilbagefører jeg en transaktion i Oracle?
Svar: Vi er nødt til at køre en ROLLBACK-erklæring for at tilbageføre en transaktion i Oracle. Det fortryder alle de ændringer, der er foretaget af transaktionen i databasen, og gendannes i dets oprindelige tilstand.
Konklusion
I denne vejledning har vi detaljeret diskuteret nogle grundlæggende begreber i PL SQL-transaktioner, der er vigtige for PL SQL-transaktionsstyring. Vi har dækket nedenstående emner:
- Transaktion.
- Brug af COMMIT i en transaktion.
- Hvad er en ROLLBACK i en transaktion?
- Brug af ROLLBACK med SAVEPOINT i en transaktion.
- LÅS bord.
Anbefalet læsning
- PL SQL-vejledning til begyndere med eksempler Hvad er PL / SQL
- Oracle Database Application Development: Oracle SQL & PL / SQL
- PL SQL-pakke: Oracle PL / SQL-pakkevejledning med eksempler
- Forskellen mellem SQL Vs MySQL Vs SQL Server (med eksempler)
- PL SQL Datetime Format: Dato- og tidsfunktioner i PL / SQL
- Komplet guide til PL SQL undtagelseshåndtering med eksempler
- SQL vs NoSQL Præcise forskelle og ved hvornår man skal bruge NoSQL og SQL
- Oracle Database Tutorial - Hvad er Oracle Database?