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

Transacciones en BD MyIsam

Estas en el tema de Transacciones en BD MyIsam en el foro de Mysql en Foros del Web. Hola a tod@s.... Estoy realizando mantenimiento a una aplicación que tiene base de datos tipo MyISAM en este momento tengo un problema... cuándo graba un ...
  #1 (permalink)  
Antiguo 27/01/2010, 09:02
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Exclamación Transacciones en BD MyIsam

Hola a tod@s....

Estoy realizando mantenimiento a una aplicación que tiene base de datos tipo MyISAM en este momento tengo un problema... cuándo graba un registro lleva información a varias tablas, digamos que cinco tablas, si grabo información y grabando o haciendo el insert en la cuarta "revienta" la transacción, no pasa nada, simplemente sigue con la quinta... y entonces queda grabado todo menos en la tabla cuatro....


Debo buscar una solución para que ésto no pase... por BD no se soporta ( ahora la bd en sí no tiene claro el tema de relaciones :-p) cómo podría resolver éste tema.. que me sugieren?

Gracias!
  #2 (permalink)  
Antiguo 27/01/2010, 09:53
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: Transacciones en BD MyIsam

Si necesitas usar transacciones, en lo que a MySQL se refiere, solamente te resta cambiar los tipos de tabla a InnoDB, porque MyISAM no soporta transacciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/01/2010, 10:00
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

Pero el cambio que implicaria, como te digo es una aplicación que ya está funcionando, con usuarios, clientes todo, el cambiar su construcción seria un impacto muy grande que no se va a hacer....


Por esto debo buscar una solución para ésto teniendo en cuenta que la base de datos es MyIsam...

Ahora, si cambio simplemente las tablas asi que?... es decir las claves primarias y todo esto también tendrian que estar organizadas no? implica más desarrollo... o estoy equivocada?
  #4 (permalink)  
Antiguo 27/01/2010, 10:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Transacciones en BD MyIsam

Siendo así, creo que podrías crearte un procedimiento o función que en el momento que se caiga una inserción, borre las anteriormente insertadas.

De igual forma, la forma mas elegante de manejar estas cosas, es con el uso de transacciones. Tienes algún inconveniente en cambiar el motor de almacenamiento a innodb?

saludos salome
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 27/01/2010, 10:16
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: Transacciones en BD MyIsam

Estructuralmente puedes tener problemas en índices FULLTEXT, o bien si usas tablas espaciales, con los campos de tipo GEOMETRY, pero en el resto, no deberías tener demasiadas complicaciones para hacer la migración,más allá de las dimensiones de la base misma.
Yo me propondría un plan de migración para ver cómo hacerlo, porque si las transacciones son la mejor opción para tus procesos, entonces no tendrás otro camino.

La otra opción, como menciona huesos52, implicaría posiblemente la creación de tablas de transacción y la consolidación de datos en procesos que pueden afectar la performance.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 27/01/2010, 10:46
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

Gracias por sus respuestas...

Pues bueno inconveniente en cambiar el motor de almacenamiento si, tiempo y desconocimiento jajaja nada más que eso....

Con las respuestas me queda más clara la situación ya es ponerlo en consideración de los clientes y de la dirección del proyecto y pues una vez tomada la decisión a aprender....

Gracias!
  #7 (permalink)  
Antiguo 27/01/2010, 10:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Transacciones en BD MyIsam

Cita:
Pues bueno inconveniente en cambiar el motor de almacenamiento si, tiempo y desconocimiento jajaja nada más que eso....
En tiempo no te lleva nada.

En conocimiento aca te lo damos

Código MYSQL:
Ver original
  1. alter table nombre_tabla engine=innodb;

Debes tener en cuenta hacerlo con la base de datos parada y los consejos anteriormente dados por gnzsoloyo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 27/01/2010, 14:36
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

gracias!!

Apenas deba hacerlo, seguro vendré por el conocimiento jajajaja....

Saludos.
  #9 (permalink)  
Antiguo 08/02/2010, 12:36
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

Ahora si!

Toca cambiar el tipo de BD, me pondré a hacer los

ALTER TABLE nombre_tabla engine=INNODB; que sustoooo!!
  #10 (permalink)  
Antiguo 08/02/2010, 13:50
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

Hola a tod@s...

Listo, he cambiado todas las tablas por INNODB, ahora que otra cosa debo tener en cuenta para el manejo de transacciones, es decir que cosas deberia estar verificando?.

saludos.
  #11 (permalink)  
Antiguo 08/02/2010, 14:31
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: Transacciones en BD MyIsam

Debes tener en cuenta lo que dice el manual de referencia, y entre todas las cosas, cuáles son las operaciones que desencadenan COMMIT implícitos.
Ese es un tema dejado de lado muchas veces, y que puede causar confusión.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 08/02/2010, 14:32
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

Okas... validando...

Gracias, les iré contando como me va ;)
  #13 (permalink)  
Antiguo 09/02/2010, 12:47
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

No entiendo....

Necesito información para dommies ...

Ya tengo lista mi bd, todo funciona... cómo sé o que pruebas puedo hacer para saber si el tema de las trasacciones está bien.. explico:

Tengo por el ejemplo el ingreso de un registro, este registro lleva información a varias tablas, pero el ingreso lo hace por insert separados, es decir tengo Tabla A,B,C,D.... y la apliación tiene un insert para A, otro para B, otro para C y otro para D... están separados porque asi construyeron la aplicación...

Si la inserción de la tabla C va mal, que deberia estar pasando en B y A... ¿Cómo controlo eso?
  #14 (permalink)  
Antiguo 09/02/2010, 12:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Transacciones en BD MyIsam

Ok... salome

Hasta ahora ya tienes soporte de transacciones pero no las estas usando.

si empleas esto:

start transaction;

insert into A values...
insert into B values...
insert into C values...


En el momento que haya un fallo que haga rollback y así se haya alcanzado a insertar en A y en B, los cambios se deshacen.

Si todo va bien, debes confirmarlo haciendo uso de commit; para que guarde definitivamente en las tablas mencionadas.

Las aplicaciones de ahora (php, visual studio) traen funciones para manejar transacciones de la base de datos en el momento en que fallen. Debes buscar como adaptar este concepto a tu aplicación.

se entiende?

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #15 (permalink)  
Antiguo 09/02/2010, 13:03
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

mmmm digamos que medio entiendo... (necesito plastilina)

ese rollback y ese commit, se ejecutan por defecto? debo poner algo en el query? en la base de datos? en el php?
  #16 (permalink)  
Antiguo 09/02/2010, 13:11
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Transacciones en BD MyIsam

Salome

Te voy a poner un ejemplo del concepto de transacciones en mysql, ya tu buscaras como implementarlas en el lenguaje.

Código MySQL:
Ver original
  1. mysql> select *from tabla1;
  2. +----------+---------+-----------------+
  3. | idextra1 | nombre1 | detalle1        |
  4. +----------+---------+-----------------+
  5. |        1 | daniel  | detalle daniel  |
  6. |        2 | daniela | detalle daniela |
  7. +----------+---------+-----------------+
  8. 2 rows in set (0.25 sec)
  9.  
  10. Query OK, 0 rows affected (0.00 sec)
  11.  
  12. mysql> insert into tabla1 values(3,'salome','detalle salome');
  13. Query OK, 1 row affected (0.00 sec)
  14.  
  15. mysql> insert into tabla1 values(4,'cristian','detalle cristian');
  16. Query OK, 1 row affected (0.00 sec)
  17.  
  18. mysql> select *from tabla1;
  19. +----------+----------+------------------+
  20. | idextra1 | nombre1  | detalle1         |
  21. +----------+----------+------------------+
  22. |        1 | daniel   | detalle daniel   |
  23. |        2 | daniela  | detalle daniela  |
  24. |        3 | salome   | detalle salome   |
  25. |        4 | cristian | detalle cristian |
  26. +----------+----------+------------------+
  27. 4 rows in set (0.00 sec)
  28.  
  29. mysql> rollback;
  30. Query OK, 0 rows affected (0.00 sec)
  31.  
  32. mysql> select *from tabla1;
  33. +----------+---------+-----------------+
  34. | idextra1 | nombre1 | detalle1        |
  35. +----------+---------+-----------------+
  36. |        1 | daniel  | detalle daniel  |
  37. |        2 | daniela | detalle daniela |
  38. +----------+---------+-----------------+
  39. 2 rows in set (0.00 sec)
  40.  
  41. Query OK, 0 rows affected (0.00 sec)
  42.  
  43. mysql> insert into tabla1 values(3,'salome','detalle salome');
  44. Query OK, 1 row affected (0.00 sec)
  45.  
  46. mysql> insert into tabla1 values(4,'cristian','detalle cristian');
  47. Query OK, 1 row affected (0.00 sec)
  48.  
  49. mysql> commit;
  50. Query OK, 0 rows affected (0.00 sec)
  51.  
  52. mysql> select *from tabla1;
  53. +----------+----------+------------------+
  54. | idextra1 | nombre1  | detalle1         |
  55. +----------+----------+------------------+
  56. |        1 | daniel   | detalle daniel   |
  57. |        2 | daniela  | detalle daniela  |
  58. |        3 | salome   | detalle salome   |
  59. |        4 | cristian | detalle cristian |
  60. +----------+----------+------------------+
  61. 4 rows in set (0.00 sec)
  62.  
  63. mysql>


Fijate que si dentro de una transacción se hace rollback, los cambios se deshacen y la tabla queda tal como estaba.

Pero si se hace commit los cambios se guardan en definitiva.

Estos comandos no se ejecutan por defecto. Por fuera de la transacción, mysql tiene un autocommit. Lo que quiere decir que después de hacer cambios en los datos , estos no se pueden recuperar de ninguna forma.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #17 (permalink)  
Antiguo 09/02/2010, 13:29
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Transacciones en BD MyIsam

Ahhh excelente excelente... ahora si voy entendiendo! gracias!
  #18 (permalink)  
Antiguo 09/02/2010, 15:44
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: Transacciones en BD MyIsam

Huesos52: Ese es un ejemplo simple y perfecto.
Deberías ponerlo entre las FAQs de MySQL, donde no hay ninguno que trate el tema...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 09/02/2010, 15:59
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Transacciones en BD MyIsam

ya mismo lo pongo gnzsoloyo...
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: bd, transacciones
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 00:22.