Bases de Datos, 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». Para más información en wikipedia.org´

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 sentencia COMMIT. En una ventana, ejecutamos lo que muestra la siguiente figura:

transacciones_mysql

 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:

transacciones_mysql2

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:

transacciones_mysql3

Para aplicar esto de las Transacciones desde Java y de igual forma usando MySQL, este link les servirá en su aprendizaje:

http://www.proactiva-calidad.com/java/jdbc/transacciones.htm

Si te ha servido la información proporcionada en este artículo, te agradeceria dejarás algún comentario!

22 comentarios en “Transacciones en MySQL

  1. Muchas gracias por este documento, me ha sido de gran ayuda, andaba buscando esto desde hace mucho y por fin lo encntré, lo voy a aplicar a mi sistema, ya que estoy iniciando con MySQL y VFP 9

  2. oye esta exelente la informacion, pero quisiera saber como hacerlo con oracle, en lugar de MySQL porque ya le intente y nadamas no jala, ya tengo la interfaz y la conexion para insertar, borrar o consultar pero quiero imprimir un reporte y es lo que me falta, si sabes algo de esto asmelo saber xfa, de antemano gracias

  3. yo tengo una duda…. quiero saber si las transacciones tambien…. «NO dejan hacer nada a nadie hasta que la transaccion termine» o sea la pregunta es..
    Si yo ingreso algo a la base de datos y despues consulto el ultimo id para ver con que id me lo agrego…
    pero entre el insert y el select… desde otra teminal insertan otro elemento a la tabla… se los va a permitir o va a esperar que yo termine mi transaccion??
    Espero haber sido claro…. muchas gracias

  4. muy buena información, gracias por tu tiempo, para explicar todo lo que aqui tienes!, horas me pasare en hacer lo que publicas, GRACIAS

    1. Muchas Gracias a ti por tu comentario. Tiene mucho tiempo que no escribo en el Blog pero ahora lo vuelvo a retomar esperando contribuir en algunas cosas más.

      Saludos!!

Replica a windoctor Cancelar respuesta