Está en la página 1de 8

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

ADMINISTRACIÓN 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 ejecución. De hecho,
podríamos decir que las transacciones aportan una característica de
"deshacer" a las aplicaciones de bases de datos.

Por tanto una Transacción nos sirve para ejecutar como un todo un
conjunto de consultas, para ello tenemos que tomar en cuenta que una
Transacción respeta las características ACID ( Atomicity, Consistency,
Isolation and Durability = Atomicidad, Consistencia, Aislamiento y
Durabilidad).

En cualquier Transacción debemos tomar en cuenta que es Atómica


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 estén ejecutando paralelamente (si
afecta si están anidadas con la transacción actual) y por último es Durable
porque una vez que se ha terminado con ella no se perderán los cambios
hechos por la misma.

Para este fin, las tablas que soportan transacciones, como es el caso de
InnoDB, son mucho más seguras y fáciles de recuperar si se produce
algún 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 más tiempo en ejecutarse.

Los pasos para usar transacciones en MySQL son:


UPTM///PNFI//Trayecto IV - 1

 Iniciar una transacción 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


transacción con el uso de la sentencia COMMIT. Únicamente cuando
se procesa un COMMIT los cambios hechos por las consultas serán
permanentes.

 Si sucede algún 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 código SQL estándar
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 PRÁCTICO

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', 'Pabón', '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 transacción 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 inserción del nuevo registro

mysql> SELECT * FROM Empledos;


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

Si en este momento ejecutamos un ROLLBACK, la transacción no será


completada, y los cambios realizados sobre la tabla no tendrán efecto.

mysql> ROLLBACK;

Query OK, 0 rows affected (0.06 sec)

mysql> SELECT * FROM Empleados;

Ahora vamos a ver que sucede si perdemos la conexión al servidor antes


de que la transacción 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 conexión, podemos verificar que el


registro no se insertó, ya que la transacción 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 conexión 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 transacción 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