Exercicis de transaccions i gestionant la concurrència.
Salta a la navegació
Salta a la cerca
Contingut
- 1 Transacció
- 1.1 Insertar un registre a la taula sp de peces, (el valors dels camp s i p han d'estar a les seves taules)
- 1.2 Insertar un registre a la taula sp de peces, (el valors dels camp s i p NO han d'estar a les seves taules)
- 1.3 Esborrar un registre de la taula sp i sortir abans de fer el commit
- 1.4 Esborrar un registre de la taula sp i fer un rollback
- 2 Bloquejos
Transacció
Insertar un registre a la taula sp de peces, (el valors dels camp s i p han d'estar a les seves taules)
Sessió 1 | Sessió 2 |
---|---|
MariaDB [peces]> begin; Query OK, 0 rows affected (0.00 sec) | |
MariaDB [peces]> select * from sp; +-----+-----+------+ | s | p | cant | +-----+-----+------+ | s1 | p1 | 100 | | s1 | p2 | 100 | (------------------) | s9 | p3 | 430 | | s9 | p4 | 300 | +-----+-----+------+ 90 rows in set (0.01 sec) |
MariaDB [peces]> insert into sp values("s9","p5",7000); Query OK, 1 row affected (0.00 sec) |
MariaDB [peces]> commit; Query OK, 0 rows affected (0.04 sec) | |
MariaDB [peces]> select * from sp; +-----+-----+------+ | s | p | cant | +-----+-----+------+ | s1 | p1 | 100 | | s1 | p2 | 100 | (------------------) | s9 | p3 | 430 | | s9 | p4 | 300 | | s9 | p5 | 7000 | +-----+-----+------+ 91 rows in set (0.00 sec) |
Insertar un registre a la taula sp de peces, (el valors dels camp s i p NO han d'estar a les seves taules)
Sessió 1 | Sessió 2 |
---|---|
MariaDB [peces]> select * from sp; +-----+-----+------+ | s | p | cant | +-----+-----+------+ | s1 | p1 | 100 | | s1 | p2 | 100 | (------------------) | s9 | p4 | 300 | | s9 | p5 | 7000 | +-----+-----+------+ 91 rows in set (0.00 sec) |
MariaDB [peces]> begin; Query OK, 0 rows affected (0.00 sec) |
MariaDB [peces]> insert into sp values("s60","p70",10); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`peces`.`sp`, CONSTRAINT `fk_s` FOREIGN KEY (`s`) REFERENCES `s` (`s`) ON UPDATE CASCADE) | |
MariaDB [peces]> rollback; Query OK, 0 rows affected (0.00 sec) | |
MariaDB [peces]> select * from sp; +-----+-----+------+ | s | p | cant | +-----+-----+------+ | s1 | p1 | 100 | | s1 | p2 | 100 | (------------------) | s9 | p4 | 300 | | s9 | p5 | 7000 | +-----+-----+------+ 91 rows in set (0.00 sec) |
Esborrar un registre de la taula sp i sortir abans de fer el commit
Sessió 1 | Sessió 2 |
---|---|
MariaDB [peces]> select * from sp; +-----+-----+------+ | s | p | cant | +-----+-----+------+ | s1 | p1 | 100 | | s1 | p2 | 100 | (------------------) | s9 | p4 | 300 | | s9 | p5 | 7000 | +-----+-----+------+ 91 rows in set (0.00 sec) |
MariaDB [peces]> begin; Query OK, 0 rows affected (0.00 sec) |
MariaDB [peces]> delete from sp where s="s9" and p="p5"; Query OK, 1 row affected (0.01 sec) | |
MariaDB [peces]> exit Bye | |
MariaDB [peces]> select * from sp; +-----+-----+------+ | s | p | cant | +-----+-----+------+ | s1 | p1 | 100 | | s1 | p2 | 100 | (------------------) | s9 | p4 | 300 | | s9 | p5 | 7000 | +-----+-----+------+ 91 rows in set (0.00 sec) |
Esborrar un registre de la taula sp i fer un rollback
Sessió 1 | Sessió 2 |
---|---|
MariaDB [peces]> select * from sp; +-----+-----+------+ | s | p | cant | +-----+-----+------+ | s1 | p1 | 100 | | s1 | p2 | 100 | (------------------) | s9 | p4 | 300 | | s9 | p5 | 7000 | +-----+-----+------+ 91 rows in set (0.00 sec) |
MariaDB [peces]> begin; Query OK, 0 rows affected (0.00 sec) |
MariaDB [peces]> delete from sp where s="s9" and p="p5"; Query OK, 1 row affected (0.01 sec) | |
MariaDB [peces]> rollback; Query OK, 0 rows affected (0.00 sec) | |
MariaDB [peces]> select * from sp; +-----+-----+------+ | s | p | cant | +-----+-----+------+ | s1 | p1 | 100 | | s1 | p2 | 100 | (------------------) | s9 | p4 | 300 | | s9 | p5 | 7000 | +-----+-----+------+ 91 rows in set (0.00 sec) |
Bloquejos
Comprobació de bloqueig de la taula s, no es pot fer un select
Sessió 1 | Sessió 2 |
---|---|
Instruccio SQL a la Sessio 1 Resultat SQL sessio 1 |
|
Instruccio SQL a la Sessio 1 Resultat SQL sessio 1 |
Instruccio SQL a la Sessio 2 Resultat SQL sessio 2 |
Comprobació de bloqueig de la taula s, no es pot fer un insert
Sessió 1 | Sessió 2 |
---|---|
Instruccio SQL a la Sessio 1 Resultat SQL sessio 1 |
|
Instruccio SQL a la Sessio 1 Resultat SQL sessio 1 |
Instruccio SQL a la Sessio 2 Resultat SQL sessio 2 |
Bloquejar només la modificació de la ciutat "Granollers" de la taula S (dins d'una transacció)
Sessió 1 | Sessió 2 |
---|---|
Instruccio SQL a la Sessio 1 Resultat SQL sessio 1 |
|
Instruccio SQL a la Sessio 1 Resultat SQL sessio 1 |
Instruccio SQL a la Sessio 2 Resultat SQL sessio 2 |