Está en la página 1de 8

UPTM////PNFI//Trayecto IV - 1

ADMINISTRACIN DE BASE DE DATOS Prof. Ing. Manuel Molina


Practica de Laboratorio # 2: Manejo de Transacciones

Las transacciones aportan una fiabilidad superior a las bases de datos. Si disponemos de una serie de consultas SQL que deben ejecutarse en conjunto, con el uso de transacciones podemos tener la certeza de que nunca nos quedaremos a medio camino de su ejecucin. De hecho, podramos decir que las transacciones aportan una caracterstica de "deshacer" a las aplicaciones de bases de datos. Por tanto una Transaccin nos sirve para ejecutar como un todo un conjunto de consultas, para ello tenemos que tomar en cuenta que una Transaccin respeta las caractersticas ACID ( Atomicity, Consistency, Isolation and Durability = Atomicidad, Consistencia, Aislamiento y Durabilidad). En cualquier Transaccin debemos tomar en cuenta que es Atmica porque cada consulta es individual, nos garantiza la Consistencia porque se ejecuta todo o no se ejecuta nada, tiene Aislamiento porque no afecta a otras transacciones o consultas que se estn ejecutando paralelamente (si afecta si estn anidadas con la transaccin actual) y por ltimo es Durable porque una vez que se ha terminado con ella no se perdern los cambios hechos por la misma. Para este fin, las tablas que soportan transacciones, como es el caso de InnoDB, son mucho ms seguras y fciles de recuperar si se produce algn fallo en el servidor, ya que las consultas se ejecutan o no en su totalidad. Por otra parte, las transacciones pueden hacer que las consultas tarden ms tiempo en ejecutarse.

Los pasos para usar transacciones en MySQL son:

UPTM///PNFI//Trayecto IV - 1

Iniciar una transaccin con el uso de la sentencia BEGIN. Actualizar, insertar o eliminar registros en la base de datos. Si se quieren los cambios a la base de datos, completar la transaccin con el uso de la sentencia COMMIT. nicamente cuando se procesa un COMMIT los cambios hechos por las consultas sern permanentes. Si sucede algn problema, podemos hacer uso de la sentencia ROLLBACK para cancelar los cambios que han sido realizados por las consultas que han sido ejecutadas hasta el momento.

Vamos a ejecutar algunas consultas para ver como trabajan las transacciones. Lo primero que tenemos que hacer es crear una tabla del tipo InnoDB e insertar algunos datos.

Para crear una tabla InnoDB, procedemos con el cdigo SQL estndar CREATE TABLE, pero debemos especificar que se trata de una tabla del tipo InnoDB (TYPE= InnoDB). Esto es aplicable a cualquier tipo de tabla, pero cuando no se especifica nada, MySQL supone que se trata de una tabla MyISAM.

EJEMPLO PRCTICO Cree la base de datos empresaXYZ:

mysql> CREATE database EmpresaXYZ;


Cree la siguiente tabla llamada empleados, recuerde activar la base de datos:

mysql> CREATE TABLE Empleados(

UPTM////PNFI//Trayecto IV - 1

-> -> -> -> -> -> -> -> -> )

id int, nombre VARCHAR(15), apellido VARCHAR(15), fecha_inicio DATE, fecha_fin DATE, salario FLOAT(8,2), ciudad VARCHAR(10), descripcion VARCHAR(15) engine=InnoDB;

Haciendo un describe de la tabla:

Ahora comience a llenar registros en la tabla Empleados


mysql> insert into Empleados(id,nombre,apellido,fecha_inicio, fecha_fin, salario,ciudad,descripcion) values (1,'Jhon', 'Marquez', '2010-01-11', '2010-09-01', 1234.56, 'Tovar', 'Informatica'); mysql> insert into Empleados(id,nombre,apellido,fecha_inicio, fecha_fin, salario,ciudad,descripcion) values (2,'Leydis', 'Manzilla', '2010-01-11', '2010-09-01', 1234.56, 'Zea', 'Informatica'); mysql> insert into Empleados(id,nombre,apellido,fecha_inicio, fecha_fin, salario,ciudad,descripcion) values (3,'Catherine', 'Suarez', '2010-01-11', '2010-09-01', 1234.56, 'Tovar', 'Informatica'); mysql> insert into Empleados(id,nombre,apellido,fecha_inicio, fecha_fin, salario,ciudad,descripcion) values (4,'Luis', 'Pabn', '2010-01-11', '2010-09-01', 1234.56, 'Tovar', 'Informatica'); mysql> insert into Empleados(id,nombre,apellido,fecha_inicio, fecha_fin, salario,ciudad,descripcion) values (5,'Martin', 'Contreras', '2010-01-11', '2010-09-01', 1234.56, 'Santa Cruz', 'Informatica');

UPTM///PNFI//Trayecto IV - 1

Listando los registros

Comenzamos la transaccin con BEGIN mysql> BEGIN; Query OK, 0 rows affected (0.01 sec)

Insertamos un registro nuevo en la tabla Empleados mysql> insert into Empleados(id,nombre,apellido,fecha_inicio, fecha_fin,
salario,ciudad,descripcion) values (6,'Mildred', 'Rosales', '2010-01-11', '2010-09-01', 1234.56, 'Tovar', 'Informatica');

Query OK, 1 row affected (0.00 sec)

Verificamos la insercin del nuevo registro mysql> SELECT * FROM Empledos;

UPTM////PNFI//Trayecto IV - 1

Si en este momento ejecutamos un ROLLBACK, la transaccin no ser completada, y los cambios realizados sobre la tabla no tendrn efecto.

mysql> ROLLBACK; Query OK, 0 rows affected (0.06 sec)

mysql> SELECT * FROM Empleados;

Ahora vamos a ver que sucede si perdemos la conexin al servidor antes de que la transaccin sea completada.

mysql> BEGIN; Query OK, 0 rows affected (0.00 sec)

UPTM///PNFI//Trayecto IV - 1

mysql> insert into Empleados(id,nombre,apellido,fecha_inicio, fecha_fin,


salario,ciudad,descripcion) values (6,'Mildred', 'Rosales', '2010-01-11', '2010-09-01', 1234.56, 'Tovar', 'Informatica');

Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM Empleados;

mysql> EXIT; Cuando obtengamos de nuevo la conexin, podemos verificar que el registro no se insert, ya que la transaccin no fue completada.

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 449 to server version: 4.0.13

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT * FROM Empleados;

UPTM////PNFI//Trayecto IV - 1

Ahora vamos a repetir la sentencia INSERT ejecutada anteriormente, pero haremos un COMMIT antes de perder la conexin al servidor al salir de la consola de MySQL. mysql> BEGIN; Query OK, 0 rows affected (0.00 sec)

mysql> insert into Empleados(id,nombre,apellido,fecha_inicio, fecha_fin,


salario,ciudad,descripcion) values (6,'Mildred', 'Rosales', '2010-01-11', '2010-09-01', 1234.56, 'Tovar', 'Informatica');

Query OK, 1 row affected (0.00 sec)

mysql> COMMIT; Query OK, 0 rows affected (0.02 sec)

mysql> EXIT;

Una vez que hacemos un COMMIT, la transaccin es completada, y todas las sentencias SQL que han sido ejecutadas previamente afectan de manera permanente a las tablas de la base de datos.

UPTM///PNFI//Trayecto IV - 1

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 450 to server version: 4.0.13

Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT * FROM Empleados;

También podría gustarte