Exercicis de transaccions i gestionant la concurrència.

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca


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