El documento explica el uso de transacciones en MySQL. Se crea una tabla y se insertan registros de manera individual y dentro de transacciones. Si se ejecuta un ROLLBACK, los cambios realizados dentro de la transacción no tendrán efecto, mientras que un COMMIT confirma los cambios de manera permanente. También se muestra cómo las lecturas son consistentes, de modo que los cambios no confirmados no son visibles para otras transacciones.
En nuestro a aprender a diseñar bases de datos vemos en esta ocasión lo que es desnormalización, tipos de datos y algunas consideraciones a fin de poder realizar un buen y completo diseño de base de datos
2. Casos de uso y diagramas de casos de usoSaul Mamani
Tutorial detallado de los casos de uso y los diagramas de casos de suso en UML 2.
Si tienes problemas para ver la presentación, lo puedes descargar de aquí...
https://drive.google.com/folderview?id=1-1ypq1SSRLCjL2USp0iAIaBMcSNoEzub
En nuestro a aprender a diseñar bases de datos vemos en esta ocasión lo que es desnormalización, tipos de datos y algunas consideraciones a fin de poder realizar un buen y completo diseño de base de datos
2. Casos de uso y diagramas de casos de usoSaul Mamani
Tutorial detallado de los casos de uso y los diagramas de casos de suso en UML 2.
Si tienes problemas para ver la presentación, lo puedes descargar de aquí...
https://drive.google.com/folderview?id=1-1ypq1SSRLCjL2USp0iAIaBMcSNoEzub
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
Internet es actualmente la mayor fuente de información que existe y más del 90% de ella ha sido generada desde el año 2010. Hay muchos datos que necesitan almacenarse para que los usuarios puedan acceder a ellos y, para que se guarden correctamente y conseguir una alta eficiencia al obtenerlos, es necesario un buen diseño, gestión y mantenimiento de las bases de datos. SQL (Structured Query Language) es un lenguaje de acceso a bases de datos relacionales que permite realizar operaciones entre ellas. Mediante el uso del álgebra y el cálculo relacional permite realizar consultas para obtener información. A partir del estándar, cada sistema ha desarrollado su propio SQL, como por ejemplo MySQL, Access o MariaDB.
Este minitutorial tiene como objetivo captar todos los conceptos dictados en cada sesión en el curso de Base de Datos Avanzado II, así como brindar apoyo a los alumnos de la carrera técnica de Computación e Informática, que por algún motivo no hayan asistido a clases.
UNIDAD 2. Creación de estructuras de datos
Logro de la Unidad de Aprendizaje
Al término de la unidad, el alumno diseña e implementa modelos de datos que incorporen reglas o restricciones mediante la definición de objetos tales como tablas, secuencias y sinónimos.
Temario
2.1 Tema 3: CREACIÓN DE ESTRUCTURAS DE DATOS
2.1.1 Creación y modificación de tablas
2.1.2 Creación de restricciones
2.1.3 Manejo de índices
2.1.4 Manejo de secuencias
2.1.5 Manejo de sinónimos
1. Basesde Datos 403
Transacciones
1
Ejercicio 2 Transacciones
mysql> CREATE TABLE innotest (campo INT NOT NULL PRIMARY KEY) TYPE = InnoDB;
Query OK, 0 rows affected (0.10 sec)
mysql> INSERT INTO innotest VALUES(1);
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO innotest VALUES(2);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO innotest VALUES(3);
Query OK, 1 row affected (0.04 sec)
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
+-------+
3 rows in set (0.00 sec)
De acuerdo, nada espectacular. Ahora cómo usar transacciones.
mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO innotest VALUES(4);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
+-------+
4 rows in set (0.00 sec)
Si en este momento se ejecuta un ROLLBACK, la transacción no será completada, y los cambios realizados sobre la tabla
no tendrán efecto.
mysql> ROLLBACK;
Query OK, 0 rows affected (0.06 sec)
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
+-------+
3 rows in set (0.00 sec)
Ahora qué sucede si se pierde la conexión al servidor antes de que la transacción sea completada.
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO innotest VALUES(4);
Query OK, 1 row affected (0.00 sec)
2. Basesde Datos 403
Transacciones
2
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
+-------+
4 rows in set (0.00 sec)
mysql> EXIT;
Bye
Cuando se obtenga de nuevo la conexión, podemos verificar que el registro no se insertó, ya que la transacción no fue
completada.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 449 to server version: 4.0.13
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
+-------+
3 rows in set (0.00 sec)
Ahora repetir la sentencia INSERT ejecutada anteriormente, pero haremos un COMMIT antes de perder la conexión al
servidor al salir del monitor de MySQL.
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO innotest VALUES(4);
Query OK, 1 row affected (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.02 sec)
mysql> EXIT;
Bye
Una vez que se comete o confirma la transacción con un COMMIT, la transacción es completada, y todas las sentencias
SQL que han sido ejecutadas previamente afectan de manera permanente a las tablas de la base de datos.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 450 to server version: 4.0.13
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
+-------+
4 rows in set (0.00 sec)
3. Basesde Datos 403
Transacciones
3
Lecturas consistentes
Por default, las tablas InnoDB ejecutan un lectura consistente (consistent read). Esto significa que cuando una sentencia
SELECT es ejecutada, MySQL regresa los valores presentes en la base de datos hasta la transacción más reciente que ha
sido completada. Si alguna transacción está en progreso, los cambios hechos por alguna sentencia INSERT o UPDATE no
serán reflejados. Sin embargo, existe una excepción: las transacciones abiertas si pueden ver sus propios cambios. Para
demostrar esto, se necesita establecer dos conexiones al servidor MySQL.
Abrir dos sesiones de mysql a la vez:
Agregar un registro dentro de una transacción desde la primera conexión:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 524 to server version: 4.0.13
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO innotest VALUES(5);
Query OK, 1 row affected (0.00 sec)
Ahora, desde una segunda conexión se consultan los datos de nuestra tabla.
4. Basesde Datos 403
Transacciones
4
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 525 to server version: 4.0.13
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
+-------+
4 rows in set (0.00 sec)
Como se puede observar, el registro que se ha insertado desde la primera conexión no es regresado puesto que forma
parte de una transacción que no ha sido completada. Ahora, desde la primera conexión se ejecuta la misma consulta
SELECT.
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+-------+
5 rows in set (0.00 sec)
Después de completar la transacción con una sentencia COMMIT en la 1ra conexión se puede verificar que desde la 2da
conexión los cambios ya son visibles.
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+-------+
5 rows in set (0.00 sec)
Otro ejemplo
En el ejemplo anterior se ha usado únicamente sentencias INSERT, sin embargo, sucede lo mismo con sentencias
UPDATE o DELETE. Crear una sencilla tabla llamada ventas.
mysql> CREATE TABLE ventas(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> producto VARCHAR(30) NOT NULL, cantidad TINYINT NOT NULL) TYPE = InnoDB;
Query OK, 0 rows affected (0.96 sec)
Insertar un registro.
mysql> INSERT INTO ventas VALUES(0,'Gansito marinela',3);
Query OK, 1 row affected (0.16 sec)
5. Basesde Datos 403
Transacciones
5
mysql> SELECT * FROM ventas;
+----+------------------+----------+
| id | producto | cantidad |
+----+------------------+----------+
| 1 | Gansito marinela | 3 |
+----+------------------+----------+
1 row in set (0.01 sec)
Ahora iniciar una transacción con la sentencia BEGIN.
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
Actualizar elregistro.
mysql> UPDATE ventas SET cantidad=4 WHERE id=1;
Query OK, 1 row affected (0.07 sec)
Lgneas correspondientes: 1 Cambiadas: 1 Avisos: 0
Verificar que los cambios han sucedido.
mysql> SELECT * FROM ventas;
+----+------------------+----------+
| id | producto | cantidad |
+----+------------------+----------+
| 1 | Gansito marinela | 4 |
+----+------------------+----------+
1 row in set (0.00 sec)
Si se quiere deshacer los cambios, entonces ejecutamos un ROLLBACK.
mysql> ROLLBACK;
Query OK, 0 rows affected (0.06 sec)
Verificar que se deshicieron los cambios.
mysql> SELECT * FROM ventas;
+----+------------------+----------+
| id | producto | cantidad |
+----+------------------+----------+
| 1 | Gansito marinela | 3 |
+----+------------------+----------+
1 row in set (0.00 sec)
Actualizar elregistro usando otra transacción.
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE ventas SET cantidad=2 WHERE id=1;
Query OK, 1 row affected (0.00 sec)
Líneas correspondientes: 1 Cambiadas: 1 Avisos: 0
mysql> SELECT * FROM ventas;
+----+------------------+----------+
| id | producto | cantidad |
+----+------------------+----------+
| 1 | Gansito marinela | 2 |
+----+------------------+----------+
1 row in set (0.00 sec)
Confirmar la transacción. Después de ejecutar el COMMIT los cambios serán permanentes y definitivos.
mysql> COMMIT;
Query OK, 0 rows affected (0.05 sec)
mysql> SELECT * FROM ventas;
+----+------------------+----------+
| id | producto | cantidad |