estructura basica de transacciones en mysql

3

Click here to load reader

Upload: steffani-marquez

Post on 09-Aug-2015

255 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Estructura Basica de Transacciones en MYSQL

Transacciones en MySQL

El concepto de “Bases de Datos Transaccionales” es un sinónimo de fiabilidad superior a las Bases de Datos comúnes. Las Transacciones son ampliamente utilizadas en Sistemas Bancarios por mencionar solo un ejemplo.

Una Base de Datos Transaccional alberga la idea de “o todo ó mejor nada”.

A grandes razgos, la idea es que al momento de que estamos ejecutando por ejemplo una sentencia UPDATE, esta sentencia no tenga ningún efecto hasta que nosotros lo indiquemos con COMMIT. Por ejemplo;

UPDATE bd SET campo=’valor’ WHERE id=1;

Normalmente, al ejecutar la sentencia de arriba, inmediatamente los cambios se reflejarian. Pues bien, el concepto de transacción va enfocado a que al ejecutar dicha sentencia no pase nada!! Y los cambios sean realizados hasta que escribamos la sentencia COMMIT.

UPDATE bd SET campo=’valor’ WHERE id=1;

………………

………………

COMMIT; //Cuándo ejecutemos COMMIT es cuándo hasta ese momento todas las sentencias que le preceden tendrán efecto! antes no.

Esto es especialmente útil en muchos casos cuando debemos ejecutar varias sentencias SQL pero sabemos que si alguna de ellas falla por X razón entonces todo estará mal, los datos corrompidos y eso es un grave problema! Entonces, es cuando podemos pensar en usar Transacciones, si en alguna sentencia ocurre un error, se ejecuta ROLLBACK y con esto NADA se modifica, todo vuelve a su estado original, y en cambio, si todo salio bien, se ejecuta COMMIT y los cambios se realizan!

- UN SENCILLO EJEMPLO

Es importante aclarar que para trabajar con Transacciones, las tablas deben de ser de tipo InnoDB y no MyISAM, si son de este último tipo NO funcionará así que antes de continuar deben asegurarse que usarán una tabla InnoDB. En este ejemplo, usaremos la base de datos addressbook que se utilizo en el ejercicio de “Creación de Reportes en Java”

La descarga la pueden hacer aqui (click derecho y guardar como ó de lo contrario les aparecerá que no existe la página). Dentro de la carpeta esta el script sql el cuál se debera ejecutar para crear la BD.

La única tabla que contiene es de tipo MyISAM por lo cuál es necesario cambiarla a InnoDB. Para ello desde la línea de comandos de MySQL se escribe la siguiente sentencia:

ALTER TABLE `addressbook`.`contacts` ENGINE = InnoDB;

No es necesario trabajar con esta tabla, cada uno de ustedes puede trabajar con cualquier BD que ya tenga, esto solo es a modo de ejemplo.

Una vez que ya esta todo listo, abriremos dos ventanas de la línea de comandos de MySQL. Para mayor comodidad y a modo de visualizar mejor los resultados, cambiaremos el color de fondo a una de ellas y a la otra la dejaremos así.

Ahora bien, este ejercicio consiste en usar transacciones, modificar el campo Telefono de la persona que tiene el id=57. Como se sabe, los cambios no surtirán efecto hasta que nosotros lo indiquemos con la

Page 2: Estructura Basica de Transacciones en MYSQL

sentencia COMMIT. En una ventana, ejecutamos lo que muestra la siguiente figura:

Observamos que la persona con el id=57 tiene un valor de “1234567″ en el campo Telefono. Ahora bien, en la otra ventana que tenemos disponible es donde iniciaremos la transacción:

Al teclear las sentencias mostradas en la anterior figura, nuevamente nos cambiamos a la otra ventana y ejecutamos por segunda vez la consulta SELECT * FROM contacts;

Al ejecutar tal consulta NO observarán el cambio de teléfono. Notarán que sigue teniendo el valor de 1234567. Esto pasa debido a que como ya comentamos, se trata de una transacción y aún no aceptamos (commit) o rechazamos (rollback) los cambios. Ahora, si nuevamente volvemos a la ventana en donde se inicio la transacción y tecleamos el COMMIT, los cambios ya tendrán un efecto:

Page 3: Estructura Basica de Transacciones en MYSQL