Saltar la navegación

4. Concurrencia

Transacciones

Las transacciones son un conjunto de instrucciones SQL que tienen la cualidad de ejecutarse como una unidad, es decir, o se ejecutan todas o no se ejecuta ninguna.

transactions

1. Transacción comprometida

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from editoriales;
+-----+---------------+
| ide | nombre |
+-----+---------------+
| 1 | Prentice Hall |
| 2 | Alfaomega |
| 3 | Ra-Ma |
+-----+---------------+
3 rows in set (0.00 sec)

mysql> insert into editoriales values (0,"Trillas");
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from editoriales;
+-----+---------------+
| ide | nombre |
+-----+---------------+
| 1 | Prentice Hall |
| 2 | Alfaomega |
| 3 | Ra-Ma |
| 4 | Trillas |
+-----+---------------+
4 rows in set (0.00 sec)

2. Transacción no completada

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from libros;
Query OK, 5 rows affected (0.00 sec)

mysql> select * from libros;
Empty set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from libros;
+-----+------+--------------------------+------------+
| idl | ide | titulo | fecha |
+-----+------+--------------------------+------------+
| 1 | 2 | Minería de Datos | 2017-11-01 |
| 2 | 3 | Python 3 Curso Práctico | 2017-05-30 |
| 3 | 3 | Unity 2017.X | 2017-10-01 |
| 4 | 2 | Inteligencia Artificial | 2018-01-01 |
| 5 | 2 | Aprender Raspberry Pi | 2017-01-01 |
+-----+------+--------------------------+------------+
5 rows in set (0.00 sec)

3. Inter-Bloqueo

Tiempo Usuario 1 Usuario 2
1

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from libros;
Query OK, 5 rows affected (0.00 sec)

mysql> select * from libros;
Empty set (0.00 sec)

2

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from libros;
+-----+------+--------------------------+------------+
| idl | ide | titulo | fecha |
+-----+------+--------------------------+------------+
| 1 | 2 | Minería de Datos | 2017-11-01 |
| 2 | 3 | Python 3 Curso Práctico | 2017-05-30 |
| 3 | 3 | Unity 2017.X | 2017-10-01 |
| 4 | 2 | Inteligencia Artificial | 2018-01-01 |
| 5 | 2 | Aprender Raspberry Pi | 2017-01-01 |
+-----+------+--------------------------+------------+
5 rows in set (0.00 sec)

mysql> delete from libros;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

3

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from libros;
+-----+------+--------------------------+------------+
| idl | ide | titulo | fecha |
+-----+------+--------------------------+------------+
| 1 | 2 | Minería de Datos | 2017-11-01 |
| 2 | 3 | Python 3 Curso Práctico | 2017-05-30 |
| 3 | 3 | Unity 2017.X | 2017-10-01 |
| 4 | 2 | Inteligencia Artificial | 2018-01-01 |
| 5 | 2 | Aprender Raspberry Pi | 2017-01-01 |
+-----+------+--------------------------+------------+
5 rows in set (0.00 sec)

4

 

mysql> select * from libros;
+-----+------+--------------------------+------------+
| idl | ide | titulo | fecha |
+-----+------+--------------------------+------------+
| 1 | 2 | Minería de Datos | 2017-11-01 |
| 2 | 3 | Python 3 Curso Práctico | 2017-05-30 |
| 3 | 3 | Unity 2017.X | 2017-10-01 |
| 4 | 2 | Inteligencia Artificial | 2018-01-01 |
| 5 | 2 | Aprender Raspberry Pi | 2017-01-01 |
+-----+------+--------------------------+------------+
5 rows in set (0.00 sec)