Yo inicio una transacción en un script, que si pulsas un boton llama a otro script que hace un insert.
La pregunta es:
¿como se podría deshacer ese insert?
| |||
Rollback de transacción iniciada en otro script Yo inicio una transacción en un script, que si pulsas un boton llama a otro script que hace un insert. La pregunta es: ¿como se podría deshacer ese insert? |
| |||
Respuesta: Rollback de transacción iniciada en otro script mm, mucho no entiendo, pero lo que entiendo es que podes usar transacciones begin, rollback y commit, pero explicate un poco mejor. muchas gracias. saludos!! |
| ||||
Respuesta: Rollback de transacción iniciada en otro script Lo que se me ocurre es no depender de la transacción si no hacer el insert físico inmediatamente. y devolver o capturar el id que se ingreso usando por ejemplo PDO::lastInsertId() y luego si quieres deshacerlo usar un llamar un DELETE sobre ese id. bueno este caso solo funcionaría si usas secuencias o auto_increments pero la condición de delete deberías tenerlo. y ten cuidado porque ese dato al ser insertado podría ser utilizado en otra parte y bueno ya te armas un lio si lo eliminas por ejemplo por problemas de integridad referencial etc. bueno y como ya me corrí para la parte de base de datos me gustaría presentarte a un amigo. se llama ACID y su letra C significa Consistencia, no inicies algo si sabes que puede no terminar, los rollback no se usa como herramientas de validación, eso se hace antes de iniciar cualquier transacción. rollback debes usarlo solo en caso de error fatal!!!! (exageración xD). =) Espero te haya servido esta información =) Saludos.
__________________ Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :) qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png Ya sabes :) Última edición por Ribon; 02/02/2012 a las 10:46 |
| ||||
Respuesta: Rollback de transacción iniciada en otro script Otra idea podria ser tener una tabla temporal con los mismos campos (si son varios registros), una vez finalizada la transaccion es hacer un INSERT INTO tabla_original SELECT * FROM tabla_temporal; Esto migraria los campos de la temporal a la original. En el caso de que la transaccion no se realize: DELETE FROM tabla_temporal; |
| ||||
Respuesta: Rollback de transacción iniciada en otro script El problema que hay con eso es que podrían haber 2 usuarios realizando la misma operación. entonces al hacer el INSERT SELECT se insertarían datos duplicados, o peor, se insertarían registros que no deberían ingresarse :S saludos.
__________________ Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :) qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png Ya sabes :) |
| ||||
Respuesta: Rollback de transacción iniciada en otro script Es cuestion de identificar a que usuario le corresponde cada registro, eso tranquilamente con una relacion en la tabla que identifique a que usuario corresponde determinado registro esta solucionado |
| ||||
Respuesta: Rollback de transacción iniciada en otro script Igual lo ideal seria que tu conexion de Mysql sea persistente para que no se cierre al finalizar la ejecucion del script. Esto se realiza utilizando mysql_pconnect (). En este caso no se realiza el commit ya que la conexion queda abierta! IMPORTANTISIMO: mysql_pconnect() actua como mysql_connect() con dos diferencias fundamentales. Primero, durante la conexión, la función intenta primero encontrar un enlace persistente abierto con el mismo host, usuario y password. Si lo encuentra, devuelve el identificador de enlace en lugar de abrir otra conexión. Segundo, la conexión no será cerrada cuando acabe la ejecución del script. El enlace permanecerá abierta para ser usado en el futuro (mysql_close() no cierra el enlace establecido con mysql_pconnect()). Última edición por srsombrero; 02/02/2012 a las 11:24 |
Etiquetas: |