Diferencia entre revisiones de «Mod BD UD6 Tratamiento Datos»

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Creación de una transacción)
 
Línea 107: Línea 107:
  
 
<br />
 
<br />
'''[https://wiki.cifprodolfoucha.es/index.php?title=M%C3%B3dulo_Bases_de_Datos Enlace a la página principal del curso]'''
+
'''[https://wiki.cifprodolfoucha.es/index.php?title=M%C3%B3dulo_Bases_de_Datos#Unidades_Did.C3.A1cticas Enlace a la página principal del curso]'''
 
<br />
 
<br />
  

Revisión actual del 16:21 27 jun 2020

Introducción

Añadir datos: INSERT


Actualizar datos: UPDATE


Borrar datos: DELETE


Transacciones

Introducción

Veamos un ejemplo para entender qué es y para qué sirve una transacción.

Supongamos que estamos trabajando con la siguiente base de datos basada en el modelo relacional que se muestra a continuación. Cuando damos de alta a un nuevo participante, añadimos entre los datos, su nombre, dirección, teléfono, tipo (árbitro o jugador) y el país al que pertenece.

Mod BD ud6 trans 1.jpg


Para nosotros, una transacción va a ser una tarea atómica e indivisible. Quiero esto decir, que se va a ejecutar de forma completa o no se ejecuta. Cada transacción puede estar conformada por una o más operaciones sobre la base de datos.

En el ejemplo anterior, dar de alta va a suponer añadir una nueva fila a la tabla PARTICIPANTE, pero también hay que darlo de alta en la tabla JUGADOR / ARBITRO según el tipo al que pertenezca.


Imaginemos que queremos dar de alta al siguiente jugador:

'Pedro Guiti', que vive en C/ De la Tierra Nº 1, con teléfono 981212121, es un jugador que lo envía España y tiene un nivel de 5.
Este llevaría consigo dos operaciones de INSERT, Una sobre la tabla PARTICIPANTE y otra sobre la tabla JUGADOR.


¿ Pero qué pasaría si falla el segundo INSERT o el sistema se cae ? Pues que tendríamos un dato añadido a la primera tabla (PARTICIPANTE), pero ninguno a la tabla de JUGADOR, por lo que la base de datos quedaría en un estado inconsistente.

Para solucionar este problema nacen las transacciones. Con una transacción nos aseguraremos que o bien se hace todo el conjunto de operaciones o no se hace nada.


Nota: Recordar que las tablas en Mysql están creadas haciendo uso de un motor de base de datos. Dependiendo del motor, este tendrá soporte para usar transacciones. InnoDB tiene soporte. Podéis consultar la lista de motores y sus características en este enlace: https://wiki.cifprodolfoucha.es/index.php?title=Mysql_Motores_de_bases_de_datos



Creación de una transacción

Los pasos para hacer uso de una transacción siempre son los mismos en cualquier gestor de bases de datos relacional:

  • Iniciar la transacción (a partir de este punto todas las operaciones que se hagan sobre la base de datos estarán dentro de la transacción)
  • Si todo va bien, confirmar la transacción.
  • Si hubo algún error, deshacer la transacción y dejar la base de datos como estaba antes de iniciar la transacción.

Vamos a ver como se implementan estos tres pasos en MYSQL. INICIAR TRANSACCIÓN: Para ello podemos utilizar una de las tres formas siguientes (la opción en negrilla es la forma más habitual en otros gestores):

  • SET AUTOCOMMIT = 0;
  • START TRANSACTION;
  • BEGIN WORK;


CONFIRMAR TRANSACCIÓN: Para confirmar la transacción, es decir, para que todas las operaciones que se hayan hecho desde el comienzo de la transacción se acepten, debemos de poner: COMMIT [WORK]; (recordar que [ ] significa optativo, por lo tanto podemos poner COMMIT o COMMIT WORK)


DESHACER TRANSACCIÓN: En caso de que comprobemos que haya habido algún error, podremos deshacer los cambios que se produjeran en la base de datos desde el comienzo de la transacción con la orden: ROLLBACK [WORK];



Lo que es importante tener claro es que desde que marcamos el inicio de una transacción, todas las operaciones (INSERT, UPDATE, DELETE) sobre la base de datos no se harán efectivas hasta encontrar la orden COMMIT.

Nota: Mysql, por defecto, tiene configurada la opción AUTOCOMMIT a true (valor 1 u ON). Esto quiere decir que cualquier instrucción individual es tratada como una transacción y, o bien se ejecuta correctamente o si aparece cualquier error, se deshacen todas las modificaciones. Por ejemplo: DELETE FROM ARTISTAS;

Esta instrucción borra todas las filas de la tabla ARTISTAS. Si alguna de ellas provoca un error, se dejará la tabla en su estado original.


Si ponemos dos transacciones una a continuación de otra, la segunda hará implícitamente un COMMIT de la primera:

1 START TRANSACTION
2 
3 -- Operación de delete
4 
5 START TRASACTION		-- Implica un COMMIT de la anterior







Enlace a la página principal del curso




-- Ángel D. Fernández González -- (2020).