Mundo Byte

Acercando el conocimiento de TI en términos sencillos

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!

About these ads

21 Respuestas a “Transacciones en MySQL

  1. Pingback:DbRunas - Transacciones en MySQL

  2. aumakua febrero 6, 2008 en 7:34 pm

    Pequeño, prático e interesante!, justo lo que buscaba!

    Saludos

  3. David septiembre 24, 2008 en 5:21 pm

    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

  4. jovani junio 16, 2009 en 8:52 pm

    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

  5. Armando junio 26, 2009 en 3:37 am

    Hola amigo, Gracias, esta era la informacion que necesitaba. buen blog.

  6. facundo julio 13, 2009 en 1:47 am

    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

  7. Saul agosto 13, 2010 en 8:38 pm

    Muy buen aporte, corto pero muy ilustrativo.

  8. Renzo Heli octubre 18, 2010 en 1:48 am

    Gracias maestro, es justo lo que buscaba. 10 ptos

  9. Pingback:Transacciones en MySQL ejemplo « coolpersons

  10. peter junio 5, 2011 en 1:13 pm

    muy buen aporte

  11. Jorge Alberto Huape Alcaraz noviembre 14, 2011 en 9:23 pm

    Hola,

    Muchas gracias por el artículo. En lo personal, hace unos minutos mi maestra me encargó comenzar a nutrirme de conocimientos en transacciones, y pues di con tu artículo y creo que no pude haber llegado a mejor comienzo. Muchas gracias!!

  12. jcarlos enero 8, 2012 en 10:56 pm

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

    • windoctor enero 29, 2012 en 7:52 pm

      Muchas Gracias a ti por tu comentario. Tiene mucho tiempo que no escribo en el Blog pero ahora lo vuelvo a retomar.

      Saludos!!

  13. Cristiano enero 16, 2012 en 5:06 pm

    Hola windoctor, muy buen articulo. Esta bien explicado y me sirvio mucho. Gracias

    • windoctor enero 29, 2012 en 7:53 pm

      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!!

  14. Pingback:Base de Datos Transaccionales « ingbda8a

  15. jose abril 2, 2012 en 6:20 pm

    Buen articulo amigo, gracias por compartir tu conocimiento.

  16. diegodesdecolombia septiembre 19, 2012 en 2:00 pm

    Interesante …. Muchas Gracias …

  17. andy octubre 27, 2012 en 12:04 am

    interesante y practico gracias

  18. zulma mayo 30, 2013 en 6:29 pm

    enserio me he matado buscando un ejemplo así, mil gracial

  19. home security junio 2, 2013 en 8:35 pm

    Incredible points. Outstanding arguments.

    Keep up the great work.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 204 seguidores

%d personas les gusta esto: