pl sql transactions commit
Obteniu més informació sobre les transaccions SQL PL amb exemples d’instruccions COMMIT, ROLLBACK i SAVEPOINTS:
En aquest article, continuarem amb Sèrie PL / SQL . A la Paquet PL SQL tutorial, hem après sobre Package, els seus avantatges, especificacions i estructura.
Aquí explorarem les transaccions PL SQL i les seves característiques. Discutirem algunes declaracions PL / SQL com COMMIT, ROLLBACK, SAVEPOINTS, etc., relacionades amb les transaccions PL SQL.
També coneixerem les instruccions LOCK TABLe i AUTOCOMMIT a PL SQL.
Comencem amb la discussió !!
Què aprendreu:
Transaccions SQL PL
Un component atòmic de treball en una base de dades que té diverses sentències SQL s’anomena transacció. Es coneix com a atòmic perquè un cop hi ha canvis afectats per les sentències SQL, es poden confirmar (actualitzacions indefinides a la base de dades) o desfer-se (desfer les actualitzacions de la base de dades).
Cal comprometre una sentència SQL, en cas contrari, es pot recuperar i totes les modificacions que se suposava que havia de fer la sentència SQL es mantenen desferes. Si el programa PL / SQL s’atura enmig de la transacció, la base de dades no té cap impacte i es restaura al seu estat original.
COMMIT i ROLLBACK s’encarreguen del fet que els canvis a la base de dades siguin eterns o es desfacin. La sentència SAVEPOINT apunta a la posició actual en el processament de transaccions.
Inicieu el processament de transaccions
Cada transacció té un inici i una finalització.
Els incidents següents marquen l'inici d'una transacció:
- Després de la connexió a la base de dades, s'executa la primera sentència SQL.
- Una nova sentència SQL s'executa després de completar la sentència SQL anterior.
Finalitza el processament de transaccions
Cada programa PL / SQL ha de tenir una sentència COMMIT o ROLLBACK. Depèn únicament de la lògica de programació si hem d’utilitzar un COMMIT o un ROLLBACK després de la transacció.
Si no s’utilitzen instruccions COMMIT o ROLLBACK, depèn de l’entorn amfitrió com ha de ser l’estat final de la base de dades. Per exemple, en un entorn SQL * PLUS, si un bloc de codi PL / SQL no té una sentència COMMIT o ROLLBACK, l'estat de la base de dades dependrà del bloc de codi que s'executi just després.
En un entorn Oracle, si incloem una sentència COMMIT o executem l'ordre DISCONNECT, EXIT o QUIT després d'executar una consulta de definició de dades o control de dades, la transacció es compromet. A més, si incloem una instrucció ROLLBACK, la transacció es desfà.
Per tant, es pot finalitzar una transacció a causa dels escenaris següents:
- S'executa una sentència ROLLBACK o COMMIT.
- A DDL query ( per exemple, s'executa una declaració de creació de taules), després de la qual s'executa el COMMIT per defecte.
- Una consulta DCL ( per exemple, s'executa una sentència GRANT), després de la qual s'executa el COMMIT per defecte.
- L'usuari finalitza la connexió a la base de dades.
- L'usuari executa la sentència EXIT per sortir de l'SQL * PLUS, després del qual s'executa COMMIT per defecte.
- SQL * PLUS troba una terminació inusual, després de la qual ROLLBACK s'executa per defecte.
- Una consulta DML no s'executa correctament, després de la qual ROLLBACK s'executa per defecte per tornar la base de dades al seu estat original.
COMITÈ Per als canvis permanents
La declaració COMMIT pot finalitzar la transacció actual i fer una modificació permanent tal com la realitza la transacció. Un cop s’executa COMMIT, podem obtenir les dades modificades.
A mesura que s'executa la sentència COMMIT, totes les files afectades de la taula es deixen de bloquejar. També ens ajuda a desfer-nos del SAVEPOINT. Una declaració COMMIT pot anar acompanyada opcionalment d’una instrucció WORK (COMMIT WORK) que s’afegeix només per millorar la llegibilitat del codi.
Si una transacció falla en el moment de COMMIT i no es coneix l'estat de la transacció, en aquell moment el text COMMENT del codi PL / SQL s'emmagatzema en un diccionari de dades juntament amb l'identificador de la transacció.
Sintaxi de la transacció COMMIT:
COMMIT;
Considerem una taula anomenada PROFESSORS.
Hem creat la taula TEACHERS amb l'ajut de la sentència SQL que es mostra a continuació:
CREATE TABLE TEACHERS ( CODE INT NOT NULL, SUBJECT VARCHAR (15) NOT NULL, NAME VARCHAR (15) NOT NULL, PRIMARY KEY (CODE) );
Inseriu valors en aquesta taula i, a continuació, feu la transacció de la manera següent:
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM'); INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM'); INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK'); COMMIT;
A continuació, s'executa la consulta següent:
SELECT * FROM TEACHERS;
Sortida:
el millor reproductor de DVD gratuït per a Windows 10
REPRODUCCIÓ Per desfer els canvis
Si una transacció actual es finalitza amb una instrucció ROLLBACK, desferà totes les modificacions que se suposa que es produiran a la transacció.
Una declaració ROLLBACK té les funcions següents que es detallen a continuació:
- La base de dades es restaura amb el seu estat original amb una sentència ROLLBACK per si hem suprimit per error una fila important de la taula.
- En cas d’excepció que hagi provocat el fracàs en l’execució d’una sentència SQL, una sentència ROLLBACK ens permet saltar al punt inicial del programa des d’on podem prendre mesures correctores.
- Les actualitzacions fetes a la base de dades sense una sentència COMMIT es poden revocar amb una sentència ROLLBACK.
Sintaxi per a la transacció ROLLBACK:
ROLLBACK;
Sintaxi per a la transacció ROLLBACK amb SAVEPOINT:
ROLLBACK (TO SAVEPOINT );
Aquí, el guarda_n és el nom del SAVEPOINT.
Considerem la taula PROFESSORS que hem creat anteriorment.
Implementació de codi amb ROLLBACK:
DELETE FROM TEACHERS WHERE CODE= 3; ROLLBACK;
A continuació, s'executa la consulta següent:
SELECT * FROM TEACHERS;
La sortida del codi anterior hauria de ser:
Al codi anterior, hem executat una sentència DELETE que se suposa que elimina el registre del professor amb CODI igual a 3. Tot i això, a causa de la sentència ROLLBACK, no hi ha cap impacte a la base de dades i no es fa la supressió.
SAVEPOINT per revertir canvis parcials
SAVEPOINT dóna nom i identificació al punt de processament de transaccions actual. Generalment s’associa amb una sentència ROLLBACK. Ens permet revertir algunes seccions d’una transacció sense tocar tota la transacció.
A mesura que apliquem ROLLBACK a un SAVEPOINT, s'eliminen tots els SAVEPOINTS inclosos després d'aquest SAVEPOINT concret (és a dir, si hem marcat tres SAVEPOINTS i hem aplicat un ROLLBACK al segon SAVEPOINT, automàticament se suprimirà el tercer SAVEPOINT.)
Una sentència COMMIT o una instrucció ROLLBACK elimina tots els SAVEPOINTS. Els noms donats a SAVEPOINT són identificadors no declarats i es poden tornar a aplicar diverses vegades dins d’una transacció. Hi ha un moviment de SAVEPOINT des de l’antiga fins a la posició actual dins de la transacció.
Un ROLLBACK aplicat a un SAVEPOINT només afecta la part en curs de la transacció. Així, SAVEPOINT ajuda a dividir una llarga transacció en petites seccions posicionant els punts de validació.
Sintaxi de la transacció SAVEPOINT:
SAVEPOINT ;
Aquí, guarda_n és el nom del SAVEPOINT.
Considerem de nou la taula PROFESSORS que hem creat anteriorment.
Implementació del codi de ROLLBACK AMB 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;
A continuació, s'executa la consulta següent:
SELECT * FROM TEACHERS;
La sortida del codi anterior hauria de ser:
Al codi anterior, després de ROLLBACK amb SAVEPOINT s s’aplica, només s’han inserit dues files més, és a dir, professors amb CODI 4 i 7, respectivament. Tingueu en compte que els professors amb el codi 1, 2 i 3 s’han afegit durant la creació de la taula.
Taula LOCK a PL / SQL
La sentència LOCK a PL / SQL permet bloquejar la base de dades completa en mode de bloqueig. Això determina si volem compartir o no permetre l'accés a la taula.
Prenguem un exemple de taula de panys:
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
La consulta anterior bloqueja la taula TEACHERS en mode de compartició de files. Un mode de compartició de files dóna permís per a un ús simultani a una taula. No permet als usuaris bloquejar la taula completa per a ús individual. Després de l'execució d'un COMMIT o ROLLBACK, s'alliberen els panys de taula. La paraula clau NOWAIT s’utilitza per esmentar que la base de dades no pot esperar a alliberar un bloqueig.
El mode de bloqueig és important per concloure quins altres bloquejos es poden aplicar a una taula.
Analitzem alguns modes de bloqueig disponibles a PL / SQL:
Sl. No | MODE DE BLOQUEIG | PROPÒSIT |
---|---|---|
1 | COMPARTIR FILA | Permet que diversos usuaris utilitzin la taula simultàniament. Tanmateix, no es permet als usuaris bloquejar la taula completa per a un ús exclusiu. |
2 | EXCLUSIVA FILA | Permet que diversos usuaris utilitzin la taula simultàniament. Tanmateix, no es permet als usuaris bloquejar la taula completa per a un ús exclusiu en mode de compartició. |
3 | COMPARTEIX ACTUALITZACIÓ | Permet que diversos usuaris utilitzin la taula simultàniament. Tanmateix, no es permet als usuaris bloquejar la taula completa per a un ús exclusiu. |
4 | COMPARTIR | Ens permet executar diverses consultes a la taula simultàniament. Tanmateix, no es permet als usuaris modificar la taula bloquejada. |
5 | COMPARTEIX EXCLUSIVAMENT LA FILA | Permet als usuaris amb accés només de lectura a la taula. No se'ls permet modificar la taula ni bloquejar-la en mode d'ús compartit. |
6 | EXCLUSIU | Només permet executar consultes a la taula bloquejada. |
Control automàtic de transaccions a PL / SQL
Podem fer una configuració tal que s’executi una sentència COMMIT per defecte cada vegada que s’executa una sentència INSERT o DELETE. Això es fa fent que l'entorn AUTOCOMMIT sigui variable a ON.
Sintaxi:
SET AUTOCOMMIT ON;
Una vegada més, es pot desactivar fent que l'entorn AUTOCOMMIT sigui variable a OFF.
Sintaxi:
SET AUTOCOMMIT OFF;
Preguntes i respostes freqüents
P # 1) Quina és la transacció a PL SQL?
Resposta: Una transacció és un grup d’instruccions de càlcul de dades SQL que funcionen com una unitat atòmica. Totes les transaccions tenen un caràcter atòmic, que es comprometen o es retroben.
Q # 2) Què és COMMIT a PL SQL?
Resposta: Una declaració COMMIT s'utilitza per fer un canvi permanent a la base de dades mitjançant la transacció actual. Fa que la modificació de la base de dades sigui visible per als usuaris.
P # 3) Com s'acaba una transacció?
Resposta: Una transacció finalitza amb una instrucció COMMIT o ROLLBACK explícitament. També es pot acabar incondicionalment després d'executar una sentència DML.
P # 4) Ens podem comprometre amb un activador?
Resposta: Sí, només podem activar el disparador si la transacció del disparador és independent de la transacció principal.
Q # 5) SELECT és una transacció?
Resposta: Sí, SELECT és una transacció que té totes les característiques d'una transacció.
P # 6) Com puc recuperar una transacció a Oracle?
Resposta: Hem d’executar una sentència ROLLBACK per recuperar una transacció a Oracle. Desfà tots els canvis realitzats per la transacció a la base de dades i es restablirà al seu estat original.
quins programes utilitzen c ++
Conclusió
En aquest tutorial, hem analitzat en detall alguns conceptes bàsics de les transaccions PL SQL que són essencials per a la gestió de les transaccions PL SQL. A continuació, hem tractat els temes següents:
- Transacció.
- Ús de COMMIT en una transacció.
- Què és un ROLLBACK en una transacció?
- Ús de ROLLBACK amb SAVEPOINT en una transacció.
- Taula LOCK.
Lectura recomanada
- Tutorial PL SQL per a principiants amb exemples | Què és PL / SQL
- Desenvolupament d'aplicacions de bases de dades Oracle: Oracle SQL i PL / SQL
- Paquet PL SQL: tutorial del paquet PL / SQL d'Oracle amb exemples
- Diferència entre SQL vs MySQL vs SQL Server (amb exemples)
- Format de data PL SQL: funcions de data i hora a PL / SQL
- Guia completa del maneig d'excepcions PL SQL amb exemples
- SQL vs NoSQL Diferències exactes i saber quan s'ha d'utilitzar NoSQL i SQL
- Tutorial Oracle Database: què és Oracle Database?