Академический Документы
Профессиональный Документы
Культура Документы
BEGIN : Comienza la transaccion RollBack: Retrocede la transaccion por cualquier error COMMIT: Finaliza la transaccion hasta creo que es asi. ejemplo: BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; SAVEPOINT my_savepoint; UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Bob'; -- oops ... forget that and use Wally's account ROLLBACK TO my_savepoint; UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Wally'; COMMIT; hay una funcion que se llama SAVEPOINT me imagino que es "guardar punto", esto hay que colocarlo cada vez que se hace una consulta, actualizacion, o inserccion, por que aca solo lo muestra en un solo lado, ahh y tambien hay que colocar el rollback la cantidad de veces que ponemos los savepoint??
Imagina que administras una base de datos de millones de datos. Un update a un campo te puede daar toda la informacin sin posibilidad de recuperarla. Para hacer cambios a la base de datos se debe ser muy cuidadoso y tener las herramientas para recuperarse de posibles daos. Lo que dices es exactamente lo que es. begin; Es el inicio de una transaccin. Con solo poner esta clausula es posible recuperar errores que puedas sufrir. savepoint; Con esta sentencia haces un commit hasta el punto que estes seguro no tienes errores. La diferencia con commit es que no se finaliza la transaccin. rollback; Deshace todos los cambios que se hayan realizado desde la sentencia begin. o hasta donde hayas confirmado con savepoint. commit; Confirma y termina la transaccin con los cambios establecidos. Con un ejemplo: Cdigo sql:
Ver originalCopiar
1. 2. 3. 4. 5. 6. 7. 8. 9.
pruebas=> SELECT *FROM producto; id | descr ----+------------1 | hoja 2 | hoja carta 3 | hoja oficio 4 | lapicero (4 filas)
10. pruebas=> begin; 11. BEGIN 12. pruebas=> UPDATE producto SET descr=REPLACE(descr,'hoja','papel'); 13. UPDATE 4
descr
16. ----+-------------17. 18. 19. 20. 1 | papel 2 | papel carta 3 | papel oficio 4 | lapicero
21. (4 filas)
Hemos cambiado la palabra hoja por papel. Todo anda muy bien. Entonces vamos a confirmar hasta este punto que todo va bien haciendo uso de savepint. Cdigo sql:
Ver originalCopiar
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
pruebas=> savepoint a; SAVEPOINT pruebas=> UPDATE producto SET descr=REPLACE(descr,'lapicero','boligrafo'); UPDATE 4 pruebas=> id | SELECT *FROM producto;
descr
12. (4 filas)
Mierda!!! no era bolgrafo sino pluma. Debemos deshacer todos los cambios!!!. Pero si ya tenia todo bueno hasta aca y no quiero volver a empezar. Utilizamos savepoint para deshacer los cambios hasta ese punto. Cdigo sql:
Ver originalCopiar
1. 2. 3. 4. 5. 6.
descr
----+-------------1 | papel
7. 8. 9.
10. (4 filas)
Mira que el cambio de hoja a papel se conserva y solo se recupera la palabra lapicero. Corregimos el error. Cdigo sql:
Ver originalCopiar
1. 2.
ahora todo est bien. Solo nos queda confirmar la terminacin de la transaccin y terminarla. Cdigo sql:
Ver originalCopiar
1. 2. 3. 4. 5. 6. 7. 8. 9.
descr
10. (4 filas)