Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Modificación de registros multiples tablas mediante transacciones

Estas en el tema de Modificación de registros multiples tablas mediante transacciones en el foro de Mysql en Foros del Web. Buenos dias, Tengo una estructura de base de datos en la que una de las tablas (tA) almacena registros a los cuales se asocian un ...
  #1 (permalink)  
Antiguo 09/04/2009, 04:48
 
Fecha de Ingreso: abril-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Pregunta Modificación de registros multiples tablas mediante transacciones

Buenos dias,

Tengo una estructura de base de datos en la que una de las tablas (tA) almacena registros a los cuales se asocian un conjunto de registros de otra tabla (tB) que viene a ser una subtabla de la primera. Ejemplo: La tabla tA es de facturas y la tabla tB es de líneal de la factura (podrian ser manuales, albaranes, etc.).

Para editar un registro de la tA puedo requerir de modificar añadir o borrar registros asociados de la tB. Todo esto lo estoy programando en PHP+MySQL. Y necesito que las modificaciones hechas sobre los registros asociados de tB solo se ejecuten si se confirma la modificación del registro tA.

La solución sería hacer la tabla tB InnoDB transaccional y hacer select for update de los registros asociados de tB dentro de una transacción que se confirme solo si se confirma la modificación del registro "padre" de tA. El problema es que para cargar los datos desde la BD en el navegador cliente necesito un par de iframes independientes, uno para la tabla de lineas de factura y otro para los datos de la factura en gral. Entonces al actualizar los iframes debería cerrar la conexión de la transacción con rollback por defecto para evitar inconsistencias, pero si hago eso no puedo en ningún momento terminar con commit para guardar los datos calcular los totales y guardar la fatura.

¿Alguna sugerencia?
  #2 (permalink)  
Antiguo 09/04/2009, 04:56
 
Fecha de Ingreso: abril-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Respuesta: Modificación de registros multiples tablas mediante transacciones

Otra pregunta que puede ir al hilo: ¿Se peude modificar dentro de una transaction una tabla InnoDB y otra MyISAM de modo que si se hace rollback la InnoDB se queda sin modificar pero la MyISAM si se modifica?¿Se puede enviar el COMMIT en un query diferente desde PHP?
  #3 (permalink)  
Antiguo 09/04/2009, 09:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Modificación de registros multiples tablas mediante transacciones

Por un lado yo apuntaría a resolver el problema de la actualización en el navegador, porque no podrás resolver el problema del rollback por default. Desde el mimo momento en que debes cerrar la conexión sin un COMMIT, no podrás controlar la situación.
Una posibilidad que deberías explorar es la ejecución de estas actualizaciones por medio de Store procedures y crear las transacciones dentro de ellos.

Respecto a esto:
Cita:
¿Se peude modificar dentro de una transaction una tabla InnoDB y otra MyISAM de modo que si se hace rollback la InnoDB se queda sin modificar pero la MyISAM si se modifica?
La respuesta es definitivamente NO. Las sentencias DDL como CREATE, ALTER y DROP contienen un COMMIT implícito que no puede desactivarse. Esto también corre para, por ejemplo, Oracle. Oracle por su lado creo una serie de características que permiten resolver los DROP por medio de diversos recursos, pero no es el caso de MySQL. Lo que creas o destruyes queda así.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:56.