Diferència entre revisions de la pàgina «SQL transaccions»
Línia 17: | Línia 17: | ||
Amb ajuda de 2 consoles concurrents de mysql i una BD adient, comprova els modes de treball de les transaccions i de LOCK TABLE. | Amb ajuda de 2 consoles concurrents de mysql i una BD adient, comprova els modes de treball de les transaccions i de LOCK TABLE. | ||
− | + | Per cada exercici has de realitzar alguna prova que demostri al professor que has entès els conceptes. | |
− | # Comprova la diferència entre '' | + | # Transaccions i bloqueig de taules. |
− | # Comprova que quan inicies una transacció els canvis no es consoliden fins que fas COMMIT. | + | ## Comprova la diferència entre LOCK TABLE '''READ''' i LOCK TABLE '''WRITE'''. |
+ | ## És el mateix per les taules ''InnoDB'' que per les ''MyISAM''? | ||
+ | ## Comprova que quan inicies una transacció els canvis no es consoliden fins que fas COMMIT. Caldrà que inventis un exemple. | ||
+ | ## És el mateix per les taules ''InnoDB'' que per les ''MyISAM''? | ||
+ | # El motor ''InnoDB'' disposa també de diverses modalitats de bloqueig de files o [https://dev.mysql.com/doc/refman/5.5/en/innodb-lock-modes.html LOCK ROWS per InnoDB]. | ||
+ | ## Què és un ''deadlock''? | ||
+ | ## Prova de reproduir l'exemple que es mostra en el link de MySQL indicat. | ||
+ | ## En aquest exemple, s'ha produït finalment el ''deadlock'' o no? |
Revisió del 19:13, 1 oct 2015
Manipular les bases de dades és quelcom molt delicat i on un error pot suposar una pèrdua de moltes dades. Això pot passar molt fàcilment amb les comandes DELETE i UPDATE, ja que cal que continguin una clàusula de condició WHERE, i si ens equivoquem en aquesta podem afectar a totes les dades.
Necessitem, doncs algun tipus de UNDO (oepració de "desfer els canvis"). Aquesta funcionalitat és la que s'implementa amb les transaccions. Podeu veure la sintaxi complerta a la web de MySQL.
Les comandes de transaccions són les següents:
- start transaction: tots els canvis es refereixen des del punt en què executem aquesta comanda. Si desfem els canvis, tornarem a aquest punt.
- rollback: equival a UNDO. Desfà tots els canvis i torna a la situació immediatament posterior al "start transaction".
- commit: consolida els canvis i els fa permanents, sense possibilitat de tornar enrere.
Molt relacionades amb aquestes hi ha les instruccions de més baix nivell per protecció de concurrència: LOCK TABLES. Amb aquestes podem bloquejar les operacions sobre les taules per part d'altres usuaris o sessions:
- lock read: bloqueja la taula però les operacions de lectura pels altres sessions estan permeses.
- lock write: bloqueja la taula completament.
Exercicis
Amb ajuda de 2 consoles concurrents de mysql i una BD adient, comprova els modes de treball de les transaccions i de LOCK TABLE.
Per cada exercici has de realitzar alguna prova que demostri al professor que has entès els conceptes.
- Transaccions i bloqueig de taules.
- Comprova la diferència entre LOCK TABLE READ i LOCK TABLE WRITE.
- És el mateix per les taules InnoDB que per les MyISAM?
- Comprova que quan inicies una transacció els canvis no es consoliden fins que fas COMMIT. Caldrà que inventis un exemple.
- És el mateix per les taules InnoDB que per les MyISAM?
- El motor InnoDB disposa també de diverses modalitats de bloqueig de files o LOCK ROWS per InnoDB.
- Què és un deadlock?
- Prova de reproduir l'exemple que es mostra en el link de MySQL indicat.
- En aquest exemple, s'ha produït finalment el deadlock o no?