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

Update a 300 filas InnoDB, MyISAM lo hace correcto

Estas en el tema de Update a 300 filas InnoDB, MyISAM lo hace correcto en el foro de Mysql en Foros del Web. Tengo una tabla con 4,000 filas. Cada mes debo ejecutar 10 instrucciones UPDATE, c/u afecta 400 filas. Este procedimiento lo he realizado por años en ...
  #1 (permalink)  
Antiguo 01/11/2013, 14:54
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Update a 300 filas InnoDB, MyISAM lo hace correcto

  • Tengo una tabla con 4,000 filas.
  • Cada mes debo ejecutar 10 instrucciones UPDATE, c/u afecta 400 filas.
  • Este procedimiento lo he realizado por años en MyISAM y corre perfecto.
  • Recién cambié la tabla a InnoDB y no lo realiza.
  • ¿Algún problema o se debe hacer algo?

Para resolver mi necesidad, regresé la tabla a MyISAM y ya se normalizó.
  • Lo ejecuto en Windows con WampServer
  • PHP Version 5.3.13 / mysqlnd 5.0.8-dev - 20102224

Las instrucciones son:

Código MySQL:
Ver original
  1. UPDATE $tabla SET familia3 = '1' WHERE lis_cli = 'N1'
  2.  
  3. UPDATE $tabla SET familia3 = '2' WHERE lis_cli = 'N2'
  4.  
  5. UPDATE $tabla SET familia3 = '3' WHERE lis_cli = 'N3'
  6.  
  7. UPDATE $tabla SET familia3 = '4' WHERE lis_cli = 'N4'
  8.  
  9. UPDATE $tabla SET familia3 = '5' WHERE lis_cli = 'N5'
  10.  
  11. UPDATE $tabla SET familia3 = '6' WHERE lis_cli = 'N6'
  12.  
  13. UPDATE $tabla SET familia3 = '7' WHERE lis_cli = 'N7'
  14.  
  15. UPDATE $tabla SET familia3 = '8' WHERE lis_cli = 'N8'
  16.  
  17. UPDATE $tabla SET familia3 = '10' WHERE lis_cli = 'N9'

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.

Última edición por gnzsoloyo; 01/11/2013 a las 16:39 Razón: Código de programación no permitido en foros de Bases de Datos.
  #2 (permalink)  
Antiguo 01/11/2013, 16: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: Update a 300 filas InnoDB, MyISAM lo hace correcto

Por lo pronto, un cambio de MyISAM a InnoDB, en el contexto de tus UPDATEs, no tiene por qué causar ningún efecto como el que describes. El SQL que usas es demasiando ANSI como para generar problemas por ese lado.

Por lo demás, la intervención de código programado mal administrado oculta cualquier defecto proveniente de variables, charset, collation, o datos que pueda existir. No debes esconder los errores posibles devueltos por MySQL detras de un mensaje sin significación, irrelevante como "No se pudo hacer ... " lo que sea. MySQL devuelve codigos y mensajes de error cuando hay fallos y es sumamente importante capturarlos (PHP es OFF TOPIC de este foro, como te habrás ya dado cuenta).
Verifica lo que está entrando, y posteanos los mensajes de error que devuelva MySQL (si es que devuelve errores), para ver lo que está realmente sucediendo.

Finalmente: El subforo de BBDD tiene normas específicas. Leelas. Allí se especifica por qué todo código de programacion será eliminado de los posts.
__________________
¿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 02/11/2013, 03:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Update a 300 filas InnoDB, MyISAM lo hace correcto

Lo único que se me ocurre, además de lo que te ha dicho @gnzsoloyo, nuestro moderador criollo, es que en InnoDB tengas relaciones y controles integridad referencial de ese modo. Eso exige un determinado orden de actualizaciones e inserciones. Me explicaré:
UPDATE $tabla SET familia3 = '2' WHERE lis_cli = 'N2'

si para familia3, no existe el valor '2' el una tabla familias, si es que existe, primero tendrías que insertar ese valor.

No sé si será tu caso.
  #4 (permalink)  
Antiguo 02/11/2013, 09:13
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Update a 300 filas InnoDB, MyISAM lo hace correcto

Cita:
Iniciado por jurena Ver Mensaje
Lo único que se me ocurre, además de lo que te ha dicho @gnzsoloyo, nuestro moderador criollo, es que en InnoDB tengas relaciones y controles integridad referencial de ese modo. Eso exige un determinado orden de actualizaciones e inserciones. Me explicaré:
UPDATE $tabla SET familia3 = '2' WHERE lis_cli = 'N2'

si para familia3, no existe el valor '2' el una tabla familias, si es que existe, primero tendrías que insertar ese valor.

No sé si será tu caso.
Ambos campos se ubican en la misma tabla (Ver instrucción utilizada).
Solo se hace uso de esa sola tabla, y no tiene relaciones con otras tablas.
Es extraño, seguiré probando.

Gracias por tu comentario.
  #5 (permalink)  
Antiguo 02/11/2013, 11:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Update a 300 filas InnoDB, MyISAM lo hace correcto

Antes de seguir haciendo otras pruebas, haz lo siguiente. Haz una copia en local de tu base y cambia el motor a InnoDB.
Luego haz simplemente una inserción en esa nueva tabla, por consola o en phpmyadmin o lo que uses
Código MySQL:
Ver original
  1. UPDATE nombredetutabla SET familia3 = '1' WHERE lis_cli = 'N1'

Si funciona, el problema está en la programación... y, si no es así, te devolverá algún error que deberías hacernos llegar.

Etiquetas: 300, correcto, filas, innodb, myisam, php, sql, tabla, update
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 17:45.