Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/05/2011, 07:12
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: cambiar toda la base de datos de MyISAM a innoDB

Bueno, las tablas son InnoDB, eso es evidente. Y hay índices definidos sobre valores que deberían ser FOREIGN KEYs, pero las FK no están.
Esto puede suceder si la base fue creara originalmente sin especificar que la tabla debía ser InnoDB, y el servidor tenía definido como motor por default el MyISAM. Si no se indica específicamente InnoDB, MySQL le asigna el otro tipo sin preguntar.
Por esto es buena práctica poner en el script de creación de las bases los tipos de tabla en forma específica, y no dejar que lo resuelva el servidor.
Ahora bien, el script puede haber tenido la indicación de las FK, pero como MyISAM no posee FK, no las puede crear y solamente genera estos índices. Por cuestiones preventivas, indicar una FK en el CREATE TABLE, sobre un motor MyISAM no genera erroes, sino warnings, que no son lo mismo, por lo que simplemente ignoró el problema y creó la tabla.
¿Se entiende el inconveniente?
No se trata de un comportamiento erróneo, eso es lo que MySQL hace siempre en estos casos: Ignora cualquier indicación de FK si va a crear la tabla como MyISAM.

Dos soluciones:
1) Elimina todos los índices de cada tabla, que correspondan a FK, y vuelve a crear las FK, ahora con las tablas como InnoDB.
2) Borra la base y vuelve a crearla, asegurándote que en el script se indique específicamente el tipo de tabla InnoDB (ENGINE=InnoDB). Siempre.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)