editat perDarrera edicióDiferènciesRestaurar Revisió
daniel herrera18/01/2017 19:57
@@ -2,6 +2,8 @@
 Llenguatges SQL: DML i DDL
 Entenent els nivells d'isolació
 En el video [nivells de isolació](https://youtu.be/6Wfu9ueOJ6g) trobareu una explicació de les possibles anomalies de lectura i com se solucionen amb els nivells d'isolació.
+
+[![nivells d'isolació](http://i.imgur.com/t04maAW.png)](https://youtu.be/6Wfu9ueOJ6g)
 
 **Exercici.** 
 
Restaurar
daniel herrera18/01/2017 19:51
@@ -46,6 +46,13 @@
        INSERT INTO seients (id, passatger) VALUES( @seient_desitjat, @numPassatger);
        COMMIT;
     END;
+
+
+**Solucions**
+
+Cas 1: El nivell d'isoliació `read commited` no és suficient, potser assignen un viatge al taxi just abans del nostre `update`. Cal un nivell d'isolació `repeatable read`.
+
+Cas 2: Per reservar els seients es fan inserts a la base de dades, el nivell d'isolació  `serialitzable` és l'únic que ens garanteix que no s'insertaran dades dins del conjunt de dades llegits en la comprovació del seient lliure.
 Continguts: 
 
 Resultats d'aprenentatge: 
Restaurar
daniel herrera18/01/2017 19:40
@@ -3,9 +3,11 @@
 Entenent els nivells d'isolació
 En el video [nivells de isolació](https://youtu.be/6Wfu9ueOJ6g) trobareu una explicació de les possibles anomalies de lectura i com se solucionen amb els nivells d'isolació.
 
-Exercici. Explica quin nivell d'isolació aplicaries als següents casos:
+**Exercici.** 
 
-1) Una empresa de taxis assigna els viatges a un taxi a l'atzar. Fixat en el codi SQL, digues quin problema poden tenir segons el nivell d'isolació triat:
+A continuació es plantegen dos programets que modifiquen dades a la base de dades. Observa el codi i digues quin seria el nivell d'isolació mínim ideal per a cadascun d'ells.
+
+**Cas 1** Una empresa de taxis assigna els viatges a un taxi a l'atzar. Fixat en el codi SQL, digues quin problema poden tenir segons el nivell d'isolació en que s'executi la transacció:
 
     :::sql
     begin transaction;
@@ -24,7 +26,7 @@
     set idViatgeActual = 1000;
     commit;
 
-2) Una companya d'avions utilitza el següent algoritme per tal de canviar els viatgers de seient quan aquests ho demanen. Amb quins nievells d'isolació el viatger es pot quedar a terra? Per què?
+**Cas 2** Una companya d'avions utilitza el següent algoritme per tal de canviar els viatgers de seient quan aquests ho demanen. Amb quins nievells d'isolació el viatger es pot quedar a terra? Per què?
 
     :::sql
     SET @seient_desitjat = 100;
Restaurar
daniel herrera18/01/2017 19:33
@@ -24,7 +24,7 @@
     set idViatgeActual = 1000;
     commit;
 
-2) Una companya d'avions utilitza el següent algoritme per tal de canviar els viatgers de seient quan aquests ho demanen.
+2) Una companya d'avions utilitza el següent algoritme per tal de canviar els viatgers de seient quan aquests ho demanen. Amb quins nievells d'isolació el viatger es pot quedar a terra? Per què?
 
     :::sql
     SET @seient_desitjat = 100;
Restaurar
daniel herrera18/01/2017 19:28
@@ -23,6 +23,26 @@
     Update taxis                   --li assignem el viatge
     set idViatgeActual = 1000;
     commit;
+
+2) Una companya d'avions utilitza el següent algoritme per tal de canviar els viatgers de seient quan aquests ho demanen.
+
+    :::sql
+    SET @seient_desitjat = 100;
+    SET @seient_actual = 210;
+    BEGIN TRANSACTION;
+    --comprovo que està lliure:
+    SET @num_ocupants = ( select coalesce( count(*), 0 )
+                         from seients
+                         where id =  @seient_desitjat );
+    --si no està lliure sortir
+    IF @nun_ocupants > 0 THEN BEGIN
+       RAISERROR (50005, 10, 1, N'El seient desitjat no està lliure');
+       ROLLBACK;
+    END ELSE
+       DELETE FROM seients WHERE id = @seient_actual;
+       INSERT INTO seients WHERE ID = @seient_desitjat;
+       COMMIT;
+    END;
 Continguts: 
 
 Resultats d'aprenentatge: 
Restaurar
daniel herrera18/01/2017 19:13
@@ -2,6 +2,26 @@
 Llenguatges SQL: DML i DDL
 Entenent els nivells d'isolació
 En el video [nivells de isolació](https://youtu.be/6Wfu9ueOJ6g) trobareu una explicació de les possibles anomalies de lectura i com se solucionen amb els nivells d'isolació.
+
+Exercici. Explica quin nivell d'isolació aplicaries als següents casos:
+
+1) Una empresa de taxis assigna els viatges al taxi lliure més convenient segons el viatge:
+
+    :::sql
+    begin transaction;
+    insert into viatges ( id, numPassatgers, origen )
+    values ( 1000, 3, 'Cruilla Balmes-Muntaner' );
+    commit;
+    
+    begin transaction;
+    
+    select @ID = max( idTaxi )     --seleccionem un taxi
+    from taxis
+    where idViatgeActual is Null;
+    
+    Update taxis                   --li assignem el viatge
+    set idViatgeActual = 1000;
+    commit;
 Continguts: 
 
 Resultats d'aprenentatge: 
Restaurar
daniel herrera18/01/2017 19:06
@@ -1,7 +1,7 @@
 
 Llenguatges SQL: DML i DDL
 Entenent els nivells d'isolació
-En el video [nivells de isolació](https://youtu.be/6Wfu9ueOJ6g) trobareu una explicació de que són les anomalies de lectura i com se solucionen amb els nivells d'isolació.
+En el video [nivells de isolació](https://youtu.be/6Wfu9ueOJ6g) trobareu una explicació de les possibles anomalies de lectura i com se solucionen amb els nivells d'isolació.
 Continguts: 
 
 Resultats d'aprenentatge: 
Restaurar
Consulteu nota legal i condicions