| ||||
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback Es obvio que si el INSERT se está ejecutando después de iniciar la transacción, el mismo queda contenido entre las acciones afectadas por el ROLLBACK. Eso es una transacción precisamente: Afecta toda operación INSERT/UPDATE/DELETE realizada en esa sesión del usuario. Al menos en el caso de MySQL. Con otros DBMS puede haber alguna alternativa.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback Estoy con mysql. O sea que el insert necesita un empujon... un COMMIT? Vere si lo puedo hacer funcionar. Edit: ok, mi Log necesita un COMMIT para funcionar. Esto no traería problemas cuando no este en contexto de transacciones, verdad? Tampoco habría riesgo de que se re-ejecuten comandos anteriores porque ya hice el rollback, cierto? |
| ||||
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback Supongo que no estás hablando en serio... Un COMMIT confirma todas las operaciones y cierra la transacción. Toda operación posterior estaría fuera de toda transacción y usar nuevamente COMMIT o ROLLBACK sin inicar una nueva daría error.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback Cita: A ver. Tengo esto:Toda operación posterior estaría fuera de toda transacción y usar nuevamente COMMIT o ROLLBACK sin inicar una nueva daría error. - comienzo de transaccion - operaciones - ROLLBACK - insercion en el log Esa insercion en el log no me funciona. Ese es el problema que tengo. Siguiendo tu primer respuesta, intente un COMMIT tras hacer la insercion en el Log y ahí si funcionó. O sea que el ROLLBACK no cierra la transaccion. Y la insercion en el Log (que es posterior al ROLLBACK) necesita un empujon. Es raro. |
| ||||
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback No es raro. Es lo correcto. Una transacción es un conjunto de operaciones DML que se ejecutan de una forma atómica. Se entiende por atómica que ese conjunto de operaciones se realicen y consoliden como si fuesen una sola, por lo que sólo se confirma cuando la última finaliza. Lo que sucede al declarar las transacciones es que todas las operaciones quedan en un estado "no confirmado", pero son accesibles por el usuario cuando consulta. Ahora bien, para que las operaciones queden definitivamente asentadas y disponibles para todos los usuarios, debe si o si indicarse COMMIT, o su operación contraria ROLLBACK, que deshace todo. Si no lo haces, y cierras las conexión, se produce un ROLLBACK implícito y todas las modificaciones se cancelan. Entonces la secuencia es:
Código MySQL:
Ver original ¿Se entiende la idea? Una cosa que tienes que tener muy en cuenta: Como la caida de una conexión en medio de una transacción genera un ROLLACK implícito, no puedes realizar en la programación de tus aplicaciones cierres de conexiones a MySQL en medio de una transacción. Tenlo en cuenta para cuando programes.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback Si, entiendo la idea. No sabía lo del cierre de conexion durante la transaccion, y lo tendre en cuenta pero de cualquier manera no se aplica a este caso y por otro lado uso try catch para ubicar el COMMIT y el ROLLBACK (pongo el rollback siempre en el catch) . Voy a ver si mañana puedo resolver el problema, que hoy ya le dedique mucho tiempo. La cuestion, como dije, es que no puedo hacer insercion de datos tras hacer ROLLBACK. |
| ||||
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback Verifica si tienes problemas de integridad referencial. Si alguno de los valores cancelados con el ROLLBACK se usa como FK de la tabla que quieres llenar, no podrás por restricciones de clave foránea. Fuera de eso, cualquier operación posterior al COMMIT o al ROLLBACK debe poderse realizar sin problemas. Eso en tanto no dependa de algo perdido por el ROLLBACK, como digo.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Duda transacciones. No puedo insertar datos tras un rollback Creo que el tema esta resuelto. Lo que estoy haciendo antes de guardar un error en el log es ejecutar : SET autocommit=1 Estuve leyendo que START TRANSACTION fuerza el autocommit a 0, por lo tanto lo que sigue a un COMMIT o a un ROLLBAK va a quedar sujeto a esa regla. |
Etiquetas: |