lunes, 26 de enero de 2009

Mysql : ERROR 1005 (HY000): Can't create table 'Table.frm' (errno: 150)

Trabajando con scripts de Mysql para tablas del tipo 'innodb' uno suele toparse con ciertos mensajes de error, o algunas advertencias (warnings).

Algunos mensajes con código no ayuda mucho que digamos (eso suele pasar seguido en este mundo de la computación). El último mensaje de error que tuve fué :

ERROR 1005 (HY000): Can't create table 'Table.frm' (errno: 150) 
 
En donde Table es el nombre de la tabla que intentaba crear. Para localizar la causa del error nos vamos a valer de un comando de mysql que creo que no es muy conocido:

mysql> SHOW ENGINE INNODB STATUS; 

Nos dará una explicación acerca del último error que obtuvimos con una llave foranea (que es la causante de este error).

Si usas un archivo de mysqldump y quieres evitar el chequeo de llaves foraneas para evitar que aparezca este error debes de escribir una linea al inicio del archivo (TOP) y otra al final (BOTTOM):

SET FOREIGN_KEY_CHECKS = 0; -- TOP  
    SET FOREIGN_KEY_CHECKS = 1; -- BOTTOM 

un pedazo de screenshot donde muestra una parte del resultado del comando mencionado.

12 comentarios:

Anónimo dijo...

¡¡Muchas gracias!!

Estos errores me estaban volviendo loco :)

TomMcCoffee dijo...

Ok, buen aporte... he tenido el mismo error y me he dado cuenta del porque surgio, claro luego de revisar con ese comando quede aun mas claro.

En mi caso, no podia crear una nueva tabla foranea por la sencilla razon que las otras 2 tablas a las que hacia referencia, ya contaban con datos, por ende no podia crear una nueva tabla con claves foraneas vacias... suena logico, asi que elimine los datos de ambas tablas y logre crear sin problemas la tercera con foreign keys...

saludos

Anónimo dijo...

Este es mi primer comentario al respecto del error ERROR 1005 (HY000): Can't create table 'Table.frm' (errno: 150), yo no soy experto en bases de datos pero lei el mensaje que aparece en ingles con show innodb status y despues de averiguar por todas partes no habia podido solucionar el inconveniente; creí que con destruir los indices y crearlos nuevamente de la manera correcta podría salir de esto pero eliminé la PK de la tabla y la volví a crear de manera correcta y superé el problema (despues de 2 dias)

_ALEX_ dijo...

me da gusto que haya funcionado para arreglar los problemas, esa es la idea

John W. Granados A. dijo...

Muchas gracias por la referencia al comando SHOW ENGINE INNODB STATUS, en la información vi que tenia el nombre de la FK repetido y por eso no podía crear la referencia en otra tabla.

Anónimo dijo...

Revisa el COLLATION, estuve rato sin dar con la solución y el problema era el COLLATION diferente, debe ser el mismo tanto en la tabla como en los campos invoclucrados.

Saludos

Anónimo dijo...

Gracias Anónimo, era le Collation efectivamente.

Williams dijo...

gracias, me guio en la resolucion de mi problema ;)

Anónimo dijo...

mi error estaba en que tenia el campo de la primary key declarado como char y el de la clave externa como numeric U_U

Anónimo dijo...

LE DEBO UNA A QUIEN QUIERA QUE HAYA DICHO LO DE TENER DECLARADA DE DIFERENTE MANERA CUANDO ES PRIMARY QUE CUANDO ES FOREIGN KEY, ME ACABAS DE AYUDAR MUCHISIMO

_ALEX_ dijo...

increible que toda esta información del 2009 siga siendo de ayuda para todos en este 2012 (y lo que falta)... :) es la magia del internet

Matute dijo...

No conocía este comando, creo que es una de las mejores cosas relativas a administración de MySQL que encontré en los últimos años.

¡¡Mil gracias!!

Publicar un comentario