Mod BD UD6 Tratamiento Datos

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introducción

  • SQL (Structured Quere Language) es un lenguaje completo de manipulación de datos que se utiliza no solamente para consultas, sino también para modificar y actualizar los datos de la base de datos. En comparación con la 'complejidad' que puede ter la sentencia SELECT, este tipo de sentencias son más sencillas.


  • El SGBD debe proteger la integridad de los datos almacenados durante los cambios, asegurándose que sólo se introduzcan datos válidos y que la base de datos permanezca autoconsistente, incluso en caso de fallos del sistema o errores a la hora de introducir los datos (uno de estos mecanismos será el uso de transacciones, que veremos posteriormente en esta unidad).
  • El SGBD debe coordinar también las actualizaciones simultáneas por parte de múltiples usuarios, asegurándose que los usuarios y sus modificaciones no interfieran unos con otros (mediante el bloqueo de registros).
  • Las tres sentencias SQL que se emplean para modificar los contenidos de una base de datos son:
  • INSERT, que añade nuevas filas de datos a una tabla,
  • DELETE, que elimina filas de datos de una tabla, y
  • UPDATE, que modifica datos existentes en la base de datos



Añadir/actualizar/borrar datos


Sentencia INSERT

  • Más información:


  • Añade una nueva fila a una tabla.
La sintaxis de Mysql es bastante más compleja de leer que si solamente nos fijamos en los aspectos más básicos.
La sintaxis básica seria la siguiente:
Mod BD Manipulacion Insert 1.JPG


Orden: Introduce en la tabla ARTISTAS una nueva fila de valores.

Mod BD Manipulacion Insert 2.JPG

Sentencia UPDATE

Sentencia 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).