Está en la página 1de 9

Practica 11:Manejo de transacciones.

Taller de Bases de Datos


28/10/2011 Jonathan Trujillo Perez

PRACTICA No. 11 MANEJO DE TRANSACCIONES OBJETIVO: Permitir que el alumno identifique la funcionalidad de las transacciones cuando se ejecutan instrucciones SQL en grupo. METODOLOGIA Las transacciones representan un nivel de confiabilidad en las bases de datos, logrando la persistencia de los cambios una vez que se haya concluido satisfactoriamente una transaccin con COMMIT, o bien deshaciendo los cambios realizados a travs de ROLLBACK, por ejemplo, si una cantidad de dinero es transferida de la cuenta de una persona a otra, se requerirn por lo menos dos consultas: UPDATE cuentas SET balance = balance - cantidad_transferida WHERE cliente = persona1; UPDATE cuentas SET balance = balance + cantidad_transferida WHERE cliente = persona2; Estas dos operaciones deben trabajar bien, pero qu sucede si ocurre algn imprevisto y "se cae" el sistema despus de que se ejecuta la primera consulta, pero la segunda an no se ha completado?. La persona1 tendr una cantidad de dinero removida de su cuenta, y creer que ha realizado su pago, sin embargo, la persona2 estar molesta puesto que pensar que no se le ha depositado el dinero que le deben. En este ejemplo tan sencillo se ilustra la necesidad de que las consultas sean ejecutadas de manera conjunta, o en su caso, que no se ejecute ninguna de ellas (propiedad de atomicidad). Es aqu donde las transacciones toman un papel muy importante. Los pasos para usar transacciones son: Iniciar una transaccin con el uso de la sentencia BEGIN. Realizar las distintas instrucciones para actualizar, insertar o eliminar registros en la base de datos. Si se quieren los cambios permanentes en la base de datos, completar la transaccin con el uso de la sentencia COMMIT. Si sucede algn problema, podemos hacer uso de la sentencia ROLLBACK para cancelar los cambios que han sido realizados por las operaciones que han sido ejecutadas hasta el momento.

EJERCICIO: 1.- Ingresar a Postgresql (a esta conexin le llamaremos C1), y crear una base de datos llamada TRANXXX , no olvidar colocar los ltimos 3 dgitos de su nmero de control en XXX. 2.- Crear la siguiente tabla: DATOS(clave integer, nombre varchar(20), edad integer, primary key(clave)) 3.-Insertar 3 registros: 4.- Consultar los datos insertados: select * from datos;

5.- Abrir otra conexin en Postgresql la cual llamaremos C2, y consultar los datos de la tabla DATOS.

Qu sucede? Se observan los 3 registros introducidos con anterioridad en la conexin C1? Al hacer la consulta aparecen los mismos datos que se ingresaron en la otra conexin. 6.- Ahora borra los registros estando en la conexin C2. (delete) Verifica con una consulta que realmente se hayan borrado.

7.- Ir a la Conexin C1 y realizar una consulta para verificar los resultados, Qu pasa? Los datos tambin se borran en la conexin uno , ya que al hacer la consulta estos no aparecen.

A TRABAJAR CON TRASACCIONES 8.- Estando en la conexin C1 iniciar una transaccin, escribiendo: BEGIN; 9.- Insertar nuevamente 3 registros con los datos que muestra la tabla: insert

10.- Ir a la conexin C2 y realizar una consulta sobre la tabla DATOS (select * from datos) Qu sucede ahora? Explica los resultados. no aparecen los datos puesto que en la conexin uno aun no se da por terminada la transaccin con la instruccin commit.

11.- Ir a la conexin C1 y escribir COMMIT; 12.- Ir a la conexin C2 y realizar una consulta sobre la tabla DATOS (select * from datos) Qu sucede ahora? Explica los resultados.

como en la conexin uno se a dado por terminada la transaccin con la instruccin commit ya es posible para conexin dos acceder a los datos por medio de una consulta.

13.- Estando en C2 iniciar una transaccin con BEGIN; 14.- Modificar la edad de juan con un nuevo valor de 25 (Update) Realizar una consulta para verificar que se haya realizado la actualizacin (select * from datos) 15.- Salir de la conexin C2 de postgresql mediante \q (enter)

16.- Ir a la conexin C1 y realizar una consulta para verificar los datos en la tabla DATOS, qu sucedi con la actualizacin? Que tipo de operacin se realiz? Commit o Rollback? Se realiz un rollback ya que al no ser terminada la transaccin con la palabra reservada commit todos los datos volvieron a su estado anterior.

17.- Volver a realizar una conexin que ser llamada C2 18.- Ahora trabajaremos con dos transacciones a la vez, en C2 inicia una nueva transaccin, BEGIN; e inserta los registros que se muestran en la tabla(2 regsitros): 4 Rosa 16 5 Lilia 17 Cuantos registros se encuentran ahora en la tabla DATOS? Con los dos que se agregaron se encuentran 5 registros

19.- Ir a conexin C1 e iniciar otra transaccin con BEGIN; e insertar los registros que se encuentran en la tabla (2 registros): 6 Mary 12 7 Tere 15 Consulta para ver cuntos registro tiene la Tabla DATOS, Qu sucede? Como en la conexin numero 2 aun no se termina la transaccin , en la conexin uno aun no aparecen los datos que se insertaron en la conexin dos, hasta que se concluya con la instruccin commit.

20.- Desde la conexin C2 Actualizar el nombre de Mary, ahora se llamar MARIANA Consultar la tabla DATOS para verificar los resultados, Qu pasa? Result correcta la operacin?

Nos damos cuenta de que no se realiz ninguna actualizacin ya que nos regresa UPDATE 0 esto pasa porque estos datos estn siendo insertados en la conexin uno la cual aun no ha sido terminada con un commit, y sern reconocidos por la conexin dos hasta que que termine la conexin uno. 21.- Estando en la conexin C2 deshacer los cambios realizados a la tabla DATOS escribiendo: ROLLBACK; Consultar los datos de la tabla DATOS y documentar sus resultados

Al ingresar la instruccin rollback deshacemos la transaccin y asi todos los cambios que se haban realizado se terminan anulando, y la tabla regresa a su estado original. 22.- Ir a la conexin C1 y concluir la transaccin escribiendo COMMIT;, verificar los datos de la tabla DATOS y documentar sus resultados.

Al terminar con un commit en la conexin uno los datos son actualizados en las dos conexiones pueden ser consultados en las dos. FIN cerrar las conexiones C1 y C2

También podría gustarte