Que Es Una Transacción en SQL

Embed Size (px)

Citation preview

  • 7/25/2019 Que Es Una Transaccin en SQL

    1/7

    QUE ES UNA TRANSACCIN EN SQL?

    Una transaccin es un conjunto secuencial de cambios a una base de datos. Las

    transacciones se emplean como mecanismo de peticin para bases de datos de

    multiusuarios (concurrencia).

    Una transaccin es una unidad de trabajo compuesta por diversas tareas, cuyo

    resultado final debe ser que se ejecuten todas o ninguna de ellas.

    TRANSACCIONES IMPLCITAS Y EXPLICITAS

    Para agrupar varias sentencias Transact !L en una "nica transaccin, disponemos

    de los siguientes m#todos$

    Transacciones e%pl&citas

    'ada transaccin se inicia e%pl&citamente con la instruccin *+ T-'T+/ y

    se termina e%pl&citamente con una instruccin '/00+T o -/LL'1.

    Transacciones impl&citas

    e inicia autom2ticamente una nueva transaccin cuando se ejecuta una instruccin

    que reali3a modificaciones en los datos, pero cada transaccin se completa

    e%pl&citamente con una instruccin '/00+T o -/LL'1.

    CMO DEFINIR TRANSACCIONES

    Por regla general en los gestores de datos relacionales modernos disponemos de tres

    tipos de transacciones seg"n la forma de iniciarlas$

    4e confirmacin autom2tica$ el gestor de datos inicia una transaccin

    autom2ticamente por cada operacin que actualice datos. 4e este modo

    mantiene siempre la consistencia de la base de datos, aunque puede generar

    bloqueos. +mpl&citas$ cuando el gestor de datos comien3a una transaccin

    autom2ticamente cada ve3 que se produce una actuali3acin de datos, pero el

    que dic5a transaccin se confirme o se des5aga, lo debe indicar el

    programador. %pl&citas$ son las que iniciamos nosotros 6a mano6 mediante instrucciones !.

    somos nosotros, los programadores, los que indicamos qu# operacio7nes va aabarcar.

    Una transaccin e%pl&cita se define de manera general con una instruccin que marca

    su inicio, y dos posibles instrucciones que marcan su final en funcin de si debe tener

    #%ito o debe fracasar en bloque.

    Transacciones anidadas

    Podemos anidar varias transacciones. 'uando anidamos varias transacciones la

    instruccin '/00+T afectar2 a la "ltima transaccin abierta, pero -/LL'1 afectar2

    a todas las transacciones abiertas.

  • 7/25/2019 Que Es Una Transaccin en SQL

    2/7

    Un 5ec5o a tener en cuenta, es que, si 5acemos -/LL'1 de la transaccin

    superior se des5aran tambi#n los cambios de todas las transacciones internas, aunque

    5ayamos reali3ado '/00+T de ellas.

    P!n"os de rec!#eracion $Sa%ePoin"&

    Los puntos de recuperacin (avePoints) permiten manejar las transacciones por

    pasos, pudiendo 5acer rollbac8s 5asta un punto marcado por el savepoint y no por

    toda la transaccin.

    Pro#iedades ACID

    Una transaccin, para cumplir con su propsito y protegernos de todos los problemas

    que 5emos visto, debe presentar las siguientes caracter&sticas$

    tomicidad$ las operaciones que componen una transaccin deben

    considerarse como una sola.

    'onsistencia$ una operacin nunca deber2 dejar datos inconsistentes. islamiento$ los datos 6sucios6 deben estar aislados, y evitar que los usuarios

    utilicen informacin que a"n no est2 confirmada o validada. (por ejemplo$

    9sigue siendo v2lido el saldo mientras reali3o la operacin:) 4urabilidad$ una ve3 completada la transaccin los datos actuali3ados ya ser2n

    permanentes y confirmados.

    estas propiedades se las suele conocer como propiedades '+4 (de sus siglas en

    ingl#s$ tomicity, 'onsistency, +solation y4urability).

    CONTROL DE UNA TRANSACCIN

    Para dirigir el flujo de una transaccin con efectividad y mantener sus propiedades,

    e%isten las siguientes sentencias en !L. La sinta%is y etiqueta dependen de cada

    gestor de bases de datos$

    '/00+T $ guarda los cambios. -/LL'1$ des5ace los cambios. ;P/+T$ crea un punto de restauracin dentro de un conjunto de

    transacciones para luego des5acer los cambios si es necesario.

    TRANSACCIONES EN SQL SER'ER

    n !L erver las instrucciones equivalentes a las gen#ricas que acabamos de ver

    son$

    *+ T-'T+/ o *+ T-$ marca el inicio de una transaccin.

    T- es un sinnimo de T-'T+/ y se suele usar m2s a menudo por

    abreviar. -/LL'1 T-T+/ o -/LL'1 T-$ fuer3a que se des5aga la

    transaccin en caso de 5aber un problema o querer abandonarla. 'ierra la

    transaccin. '/00+T T-'T+/ / '/00+T T-$ confirma el conjunto de

    operaciones convirtiendo los datos en definitivos. 0arca el #%ito de la operacinde bloque y cierra la transaccin.

  • 7/25/2019 Que Es Una Transaccin en SQL

    3/7

    Los ni%e(es de ais(a)ien"o *!e nos o+rece SQL Ser%er son,

    -+L+

  • 7/25/2019 Que Es Una Transaccin en SQL

    4/7

    * las cuentas de origen destino*/SET@importe !"#SET@CuentaOrigen !$2##%#######1$SET@CuentaDestino !$2##%#######2$/* Descontamos el importe de la cuenta origen */UPDATEC&'ASETA+DO !A+DO @importeWHERE&-C&'A !@CuentaOrigen/* .egistramos el moimiento */INSERTINTO-O0-'O(DC&'A,A+DOA'.O.,A+DO3O'.O.,-3O.',45-O0-'O)SELECTDC&'A,A+DO 6@importe,A+DO,@importe,getdate()FROMC&'AWHERE&-C&'A !@CuentaOrigen

    /* ncrementamos el importe de la cuenta destino */UPDATEC&'ASETA+DO !A+DO 6@importeWHERE&-C&'A !@CuentaDestino/* .egistramos el moimiento */INSERTINTO-O0-'O(DC&'A,A+DOA'.O.,A+DO3O'.O.,-3O.',45-O0-'O)SELECTDC&'A,A+DO @importe,A+DO,@importe,getdate()FROMC&'AWHERE&-C&'A !@CuentaDestino

    'sta forma de actuar seria erronea, a 7ue cada instruccin se e9ecutaria con:rmar;a de forma independiente, por lo 7ue un error de9ar;a los datos erroneosen la )

    Transacciones implicitas e!plicitas

    3ara actiardesactiar el modo de transacciones implicitas de

  • 7/25/2019 Que Es Una Transaccin en SQL

    5/7

    'l siguiente e9emplo muestra el script anterior Baciendo uso de transaccionesexplicitas?

    DECLARE@importe DECIMAL(18,2),@CuentaOrigen VARCHAR(12),@CuentaDestino VARCHAR(12)

    /* Asignamos el importe de la transferencia* las cuentas de origen destino*/SET@importe !"#SET@CuentaOrigen !$2##%#######2$SET@CuentaDestino !$2##%#######1$#E$INTRANSACTION O solo ' .A#E$INTR%/* Descontamos el importe de la cuenta origen */UPDATEC&'ASETA+DO !A+DO @importe

    WHERE&-C&'A !@CuentaOrigen/* .egistramos el moimiento */INSERTINTO-O0-'O(DC&'A,A+DOA'.O.,A+DO3O'.O.,-3O.',45-O0-'O)SELECTDC&'A,A+DO 6@importe,A+DO,@importe,getdate()FROMC&'AWHERE&-C&'A !@CuentaOrigen/* ncrementamos el importe de la cuenta destino */UPDATEC&'ASETA+DO !A+DO 6@importe

    WHERE&-C&'A !@CuentaDestino/* .egistramos el moimiento */INSERTINTO-O0-'O(DC&'A,A+DOA'.O.,A+DO3O'.O.,-3O.',45-O0-'O)SELECTDC&'A,A+DO @importe,A+DO,@importe,getdate()FROMC&'AWHERE&-C&'A !@CuentaDestino/* Con:rmamos la transaccion*/COMMITTRANSACTION O solo CO--

    ENDTR%#E$INCATCH/* Ea un error, desBacemos los cam$ENDCATCH

    'l siguiente e9emplo muestra el mismo script con transacciones implicitas?

    SETIMPLICIT"TRANSACTIONSON

  • 7/25/2019 Que Es Una Transaccin en SQL

    6/7

    DECLARE@importe DECIMAL(18,2),@CuentaOrigen VARCHAR(12),@CuentaDestino VARCHAR(12)

    /* Asignamos el importe de la transferencia* las cuentas de origen destino*/

    SET@importe !"#SET@CuentaOrigen !$2##%#######2$SET@CuentaDestino !$2##%#######1$#E$INTR%/* Descontamos el importe de la cuenta origen */UPDATEC&'ASETA+DO !A+DO @importeWHERE&-C&'A !@CuentaOrigen/* .egistramos el moimiento */INSERTINTO-O0-'O(DC&'A,A+DOA'.O.,A+DO3O'.O.,-3O.',45-O0-'O)SELECTDC&'A,A+DO 6@importe,A+DO,@importe,getdate()FROMC&'AWHERE&-C&'A !@CuentaOrigen/* ncrementamos el importe de la cuenta destino */UPDATEC&'ASETA+DO !A+DO 6@importeWHERE&-C&'A !@CuentaDestino/* .egistramos el moimiento */INSERTINTO-O0-'O(DC&'A,A+DOA'.O.,A+DO3O'.O.,-3O.',45-O0-'O)SELECT

    DC&'A,A+DO @importe,A+DO,@importe,getdate()FROMC&'AWHERE&-C&'A !@CuentaDestino/* Con:rmamos la transaccion*/COMMITTRANSACTION O solo CO--ENDTR%#E$INCATCH/* Ea un error, desBacemos los cam$ENDCATCH

    +a transaccin sigue actia Basta 7ue emita unainstruccin COMMITo ROLL#AC&? &na eG 7ue la primera transaccin se Bacon:rmado o reertido, se inicia automticamente una nuea transaccin lasiguiente eG 7ue la coneHin e9ecuta una instruccion para modi:car datos?

    +a coneHin continIa generando transacciones impl;citas Basta 7ue se desactiael modo de transacciones impl;citas?

    3odemos eri:car el nImero de transacciones actias a tras de@@.ACO&?

    SETIMPLICIT"TRANSACTIONSON

  • 7/25/2019 Que Es Una Transaccin en SQL

    7/7

    #E$INTR%UPDATEC&'A SET45A+A !45A+A 1PRINT@@.ACO&COMMITENDTR%#E$INCATCH

    ROLL#AC&PRINT$'rror$ENDCATCH

    Transacciones ani'a'as(

    #E$INTRANUPDATE'-3+'ADOSETO-.' !$De9oJer$WHERED!1#1#E$INTRAN

    UPDATE'-3+'ADOSETA3'++DO1 !$De9oJer?CO-$WHERED!1#1 'ste CO-- solo afecta a la segunda transaccion?COMMIT

    'ste .O++ACF afecta a las dos transacciones?ROLL#AC&

    &na consideracin a tener en cuanta cuando tra