Cita:
Iniciado por xcars
Que version de Mysql estas usando? porque podrias usar procedimientos almacenados....
Yo creo que lo mejor que puedes hacer es explicar que pretendes hacer, muchas veces le buscamos soluciones a problemas erroneos
Tienes razón. Quizá me esté metiendo en un "fregao".
Ahi vá uno de los caso más claros:
Tengo una tabla en la que almaceno eventos que son de interés para una lista de usuarios. Cuando inserto un evento nuevo, mando un email a cada uno de los miembros de la lista. Para hacer esto tengo las siguientes tablas ligadas mediante claves foraneas:
eventos(id_evento,id_lista)
listas_usuarios(id_lista,id_usuario)
notificaciones (id_evento,id_usuario)
Así pues cuando inserto una nuevo evento se ejecuta el siguiente código:
Código PHP:
1: $id_evento=1;
2: $id_lista=2;
3: BEGIN transaccion;
4: INSERT INTO eventos(id_evento,id_lista) values($id_evento,$id_lista);
5: $lista_de_usuarios=SELECT * FROM listas_usuario WHERE id_lista=$id_lista;
6: enviar_notificaciones($lista_de_usuarios);
7: COMMIT transaccion;
8: function enviar_notificaciones($lista_de_usuarios){
9: Para cada item de $lista_de_usuarios{
10: INSERT INTO notificaciones ($id_evento,$id_usuario); (ROLLBACK)
11: enviar_email($id_evento,$id_usuario);
12: }
13:}
Si no hubiese un ROLLBACK en la funcion enviar_notificaciones(), podrian existir eventos que no habrían sido notificados.
Por otra parte, y por diversos motivos, puede haber notificaciones que no tengan un evento asociado, por lo que la función enviar_notificaciones() podría ejecutarse fuera de una transaccion sin que fuera importante si el INSERT que contiene fallase. Pero si fallase en este caso, haría un ROLLBACK sin que hubiera habido un BEGIN.
...Y esta es la razón por la que pregunto qué pasa si hay un rollback sin que haya una transaccion activa.