domingo, 26 de octubre de 2008


Una transacción en MySQL es una secuencia de una o más sentencias SQL que juntas forman una unidad de trabajo.

Imagina queremos borrar uno o varios registros de una tabla, pero nos equivocamos y eliminamos todos los registros de la tabla. ¿Existe alguna forma de que corregir el error y dar marcha atrás para recuperar los registros eliminados?

Estas transaccines funcionan en modo autocommit. Esto quiere decir que se confirma (COMMIT) cada sentencia ejecutada.

Los pasos para iniciar una transacción son los siguientes:

  • Se comienza una transacción con la sentencia START TRANSACTION.

  • Si se realizan modificaciones en la base de datos y queremos volver atrás y cancelar los cambios realizados hasta el momento, utilizaremos la sentencia ROLLBACK. Si queremos confirmar los cambios realizados en la base de datos, utilizaremos la sentencia COMMIT, lo cual implica también que termina la transacción.
  • Si queremos comenzar una nueva transacción, usaremos START TRANSACTION.
ROLLBACK TRAN: Dentro de una transacción anidada esta sentencia deshace todas las transacciones internas hasta la instrucción BEGIN TRANSACTION más externa.
Borra todas las modificaciones de datos realizadas desde el inicio de la transacción o hasta un punto de retorno. También libera los recursos que retiene la transacción.Sin savepoint_name o transaction_name revierte todas las instrucciones hasta el principio de la transacción. Cuando se trata de transacciones anidadas, esta misma instrucción revierte todas las transacciones internas hasta la instrucción BEGIN TRANSACTION más externa. En ambos casos, ROLLBACK TRANSACTION disminuye la función del sistema @@TRANCOUNT a 0. ROLLBACK TRANSACTION con savepoint_name no disminuye @@TRANCOUNT.

Una instrucción ROLLBACK TRANSACTION que especifica un savepoint_name libera todos los bloqueos adquiridos más allá del punto de retorno, a excepción de las extensiones y las conversiones. Estos bloqueos no se liberan y no vuelven a convertirse a su modo de bloqueo previo.

No puede hacer referencia a un argumento savepoint_name en transacciones distribuidas que se inician de forma explícita con BEGIN DISTRIBUTED TRANSACTION o que se extienden desde una transacción local.
Una transacción no se puede revertir después de ejecutar una instrucción COMMIT TRANSACTION.

En una transacción se permiten nombres de puntos de retorno duplicados, pero una instrucción ROLLBACK TRANSACTION que utilice este nombre sólo revierte las transacciones realizadas hasta la instrucción SAVE TRANSACTION más reciente que también utilice este nombre.

COMMIT TRAN: Dentro de una transacción anidada esta sentencia únicamente reduce en 1 el valor de @@TRANCOUNT, pero no "finaliza" ninguna transacción ni "guarda" los cambios. En el caso en el que @@TRANCOUNT=1 (cuando estamos en la última transacción) COMMIT TRAN hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, libera los
recursos mantenidos por la conexión y reduce @@TRANCOUNT a 0.
BUENO DE ACUERDO CON LO QUE YO INVESTIGUE,ME PARESIO MAS IMPORTANTE Y LE ENTENDI ESTO ES LOQUE ESTOY PUBLICANDO

1 comentario:

MTE. Leonardo Hernández Peña dijo...

¿Referencias?
Se nota que lo copiaste de Monografias.com.

Me puedes decir que es savepoint_name?

Los dos últimos renglones sólo es tu aportación personal.

Como copiaste y pegaste... te quedas sin calificación según mi post en mi blog.