Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/05/2010, 04:53
Tarzan
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
RollBack de varios Insert

Hola a todos,

me gustaría controlar una serie de acciones mediante RollBack para que, en caso de fallo o error, vuelva al estado inicial como si no se hubiera hecho nada.

Tengo dos problemas, uno es que no sé si la sintaxis es realmente como la tengo puesta ya que no lo he utilizado nunca y me gustaría que alguien me explicara cómo utilizar las instrucciones BEGIN, COMMIT y ROLLBACK de forma correcta.

Mi segundo problema es que, además de 2 Insert a 2 tablas distintas de mi base de datos, debo lanzar un mail que, en caso de fallo, me gustaría retrocediera todas las acciones.

Expongo mi código para aclarar el tema:

BEGIN;

INSERT (TABLA1)
INSERT(TABLA2)

include ('envío_mail.php');

ROLLBACK;

COMMIT;


Bien. Así es como lo tengo puesto. ¿Es correcto utilizar las palabras BEGIN, COMMIT Y ROLLBACK de esta forma?

Si el primer INSERT falla, no se ha realizado ningún INSERT y debería ir al COMMIT directamente evitando lanzar el segundo INSERT y el envío del MAIL.

Si falla el Segundo INSERT, debería retroceder el primero con el ROLLBACK y continuar el código después del COMMIT

Ahora bien, si ambos INSERTS funcionan y falla el ENVÍO del mail, me gustaría que retrocediera ambos INSERTS también pero, como el envío del mail está hecho con php y no toca bases de datos, imagino que el rollback no actuará en este caso, ¿no?
¿Es esto correcto?

Otra opción es colocar el envío del mail antes de los dos inserts y fuera del BEGIN pero entonces, se enviará un mail al cliente y, si los inserts fallan, no me gusta la idea de que tenga un mail en su buzón que no puede activar nada ya que, el buen funcionamiento, depende de que las 3 cosas se ejecuten.

¿Hay alguna manera de retroceder los inserts, (rollback), si el mail falla?

Un saludo.