Saltar a Comentarios

Lunes, Mayo 12th, 2008

1005 – Can’t create table ‘xxx’ (errno: 150)

MySQl Logo

Solo hay dos posibles casos en los que nos podría fallar, con este error, nuestra creación de claves foráneas en una base de datos MySQL.

  • Si los dos campos (Nombre de campo y el nombre de campo foráneo) usan tipos de campo incompatibles.
  • Si tu usas “On Delete Set Null” pero el campo no lo permite, MySQL te devolverá el error.

Me decidi a crear este post, porque tuve el problemilla, hay mucha gente por muchos foros buscando resolverlo y no está detallada la información :D. Es una tontería que me hizo perder tiempo, espero que no se lo haga perder a otros.


Entradas Relacionadas

39 Comentarios

  • Rommel Anatoli Quintanilla Cruz
    Mozilla Firefox Mozilla Firefox 2.0.0.14 en Windows Windows XP
    Junio 22nd, 2008 at 17:08

    Es cierto, era eso, me salió el error y era por campos foránetos con tipos de datos incompatibles, gracias!

  • David
    Mozilla Firefox Mozilla Firefox 3.0.1 en Windows Windows Server 2003
    Julio 22nd, 2008 at 17:07

    Bueno… mis columnas comparten el tipo de dato que es de tipo INT con longitud (4) NOT NULL DEFAULT 0…

    No se que hacer. El statement que uso para añadir la llave foranea es:

    ALTER TABLE cti ADD FOREIGN KEY (entidad_id) REFERENCES entidades (entidad_id) ON DELETE RESTRICT ON UPDATE CASCADE;

    El error es:
    #1005 – Can’t create table ‘.\digitalizacion\#sql-7a0_da.frm’ (errno: 150)

    Por si hay alguna duda va la estructura de la tabla:
    Tabla cti
    | Field | Type | Null | Key | Default | Extra |
    | entidad_id | int(4) | NO | | 0 | |

    Tabla entidades
    | Field | Type | Null | Key | Default | Extra |
    | entidad_id | int(4) | NO | | 0 | |

  • David
    Mozilla Firefox Mozilla Firefox 3.0.1 en Windows Windows Server 2003
    Julio 22nd, 2008 at 17:17

    emmm bien ya resolvi mi problema y fue que dada la celeridad con la que lo intente (debido a que en las pruebas todo salio bien) olvide por completo que la tabla de entidades no tenia una PK asignada en el campo que se referencia como FK en la tabla cti…

    no me queda d eotra mas que decir: http://content.ytmnd.com/content/0/c/3/0c36b933b5ab957fbea475b5d612b1fe.jpg

    jajajaja gracias.

  • Dani
    Mozilla Firefox Mozilla Firefox 3.0.1 en Windows Windows XP
    Julio 23rd, 2008 at 9:04

    jaja y aqui comiendome el tarro leyendo esto jaja

  • Rull
    Internet Explorer Internet Explorer 7.0 en Windows Windows Vista
    Agosto 11th, 2008 at 10:33

    Mmmm y que puede ser si la tabla que trato de crear es la primera en ser creada, no tiene ninguna llave foranea y me manda ese código de error??

  • fdhs
    Mozilla Firefox Mozilla Firefox 3.0.1 en Windows Windows XP
    Septiembre 21st, 2008 at 1:33

    Yo tuve este problema, en una base de datos en utf8 y utf8_unicode_ci.

    Hice un “dump” de una base de datos que tenía una tabla con otro cotejamiento.

    La tabla decía:

    ENGINE=InnoDB DEFAULT CHARSET=latin1;

    Cambié a:

    ENGINE=InnoDB DEFAULT CHARSET=utf8;

    Y ya no salió el error

    Saludos

  • Fnovoa
    Mozilla Firefox Mozilla Firefox 3.0.5 en Windows Windows XP
    Diciembre 26th, 2008 at 5:03

    Hola, quero compartir un error que me sucedio y que tambien puede generarse por la imcompatibilidad de las claves foraneas en cuanto a su tipo, es decir; tengo una clave foranea que referencia a un tipo de dato numerico, pero mi clave está definida como varchar.
    Ademas de esto debe definirse las fk como index para tablas innodb y ojalá crear las constraint una vez que se haya vaciado completamente la base de datos.
    slds!!

  • no me sale!
    Mozilla Firefox Mozilla Firefox 3.0.5 en Ubuntu Linux Ubuntu Linux
    Febrero 18th, 2009 at 22:02

    Hola, alguna otra razon de este error???

  • ANGELO047
    Internet Explorer Internet Explorer 7.0 en Windows Windows XP
    Febrero 24th, 2009 at 23:12

    Otra razón por la que arroja ese error es por el tipo de tabla.. recuerden que si una es tipo MyIsam y la Otra InnoDB.. pues arrojará error 150.. pilas con eso también…

  • RetroFOX
    Mozilla Firefox Mozilla Firefox 3.0.6 en Ubuntu Linux Ubuntu Linux
    Marzo 7th, 2009 at 16:34

    Bendito ese día que te decidiste a postear este error.
    Abrazo.

  • Niko@localhost
    Mozilla Firefox Mozilla Firefox 3.0.8 en Windows Windows Vista
    Abril 21st, 2009 at 6:10

    Muchas gracias… en verdad me sirvio tu informacion, justo mi problema era el tipo de datos incompatibles, cree la estructura de mi base de datos con la herramienta MySQL Workbench (muy recomendable), pero en alguna parte hice la modificacion de los tipos de datos y no lo actualice en todas mis tablas y cuando me genero el script no me di cuenta del problema, pero ya se resolvio… Gracias de nuevo!!!

  • 1000 Gracias.
    Me ha ayudado mucho!

    Era por el segundo de los casos.

    PD: El mensaje de error no ayuda mucho :-(

  • JUSTO
    Safari Safari 530.5 en Mac OS Mac OS X
    Junio 10th, 2009 at 19:41

    Hola… ya revisé todo: motor de las tablas, tipo de datos, cotejamiento, índices, nulls, etc… todo al parecer está bien… pero me sigue saliendo ese error… existe otra razón por la cual salga este error?

  • Röeltz
    Safari Safari 530.5 en Mac OS Mac OS X
    Junio 29th, 2009 at 14:30

    Yo acabo de tener ese error. Resulta que tenía una tabla de idiomas, y el PK era CHAR(3). Una tabla de libros tenía una FK al idioma, pero mientras que la tabla de libros tenía collation en utf8, la de idiomas no. Cuando ambas tuvieron su collation en utf8 el error desapareció.

    En resumen, revisen collation de campos CHAR.

  • Elias
    Mozilla Firefox Mozilla Firefox 3.0.13 en Ubuntu Linux Ubuntu Linux
    Agosto 12th, 2009 at 18:08

    Gracias por este post, me ayudo a resolver mi problema

  • Xavi Montero
    Mozilla Firefox Mozilla Firefox 3.0.13 en Windows Windows XP
    Agosto 13th, 2009 at 21:07

    Por si le sirve a alguien:

    Yo me he estado volviendo loco con el mismo problema, el TIPO DE DATO era idéntico. en ambos casos era un VARCHAR(36) que utilizo para almacenar como claves primarias un UUID estándar en formato “string”.

    Sin embargo al ser texto, tienen asociado un “código de caracteres” y una tabla se creó con el charset con “UTF” y otra con el “LATIN”.

    No enlazaban por eso.

    Cambiando el charset para ser todo coherente (ambos a utf8 o ambos a latin) ya me dejó crear la FOREIGN KEY sin el error del “can’t create table…”

  • cosa305
    Mozilla Firefox Mozilla Firefox 3.0.13 en Ubuntu Linux Ubuntu Linux
    Agosto 25th, 2009 at 23:11

    En mi caso fue por las tablas, una InnoDB y la otra MyIsam.

    Muchas gracias a todos

  • Porque extraña razón el MySQL Workbench me puso un campo que debia ser INT como DATETIME es algo que no comprendo… ¡gracias!

  • Laura
    Internet Explorer Internet Explorer 8.0 en Windows Windows Vista
    Noviembre 18th, 2009 at 7:31

    Este error puede ser también por que la llave foránea de la tabla está haciendo referencia a un campo de la otra tabla que no es llave primaria, como sabemos las llaves foráneas deben hacer referencia a las llaves primarias de las tablas con las que las estamos relacionando.

  • Anónimo
    Mozilla Firefox Mozilla Firefox 3.5.1 en Windows Windows XP
    Marzo 25th, 2010 at 12:51

    MySQL permite usar

    CREATE TABLE tabla2 ( j INT REFERENCES tabla1 (i) );
    Con tabla1.i primary key, auto increment, not null, etc.

    Pero si se usa la sintaxis
    CREATE TABLE tabla2 (
    j INT, FOREIGN KEY (j) REFERENCES tabla1(i) );

    Dará este error porque entonces espera que j sea también NOT NULL.

  • Mar
    Mozilla Firefox Mozilla Firefox 3.6.3 en Windows Windows Vista
    Abril 30th, 2010 at 20:53

    Gracias
    Me estaba volviendo ya loca.
    Mi problema era por el tipo de dato, o más bien pq en unos sitios los tenia como not null y en otros no.
    Lo dicho… gracias :)

  • daniel
    Mozilla Firefox Mozilla Firefox 3.6 en Windows Windows NT
    Mayo 13th, 2010 at 6:54

    la verdad muchas gracias hermano… muy buen dato!!!

  • daniel
    Mozilla Firefox Mozilla Firefox 3.6 en Windows Windows NT
    Mayo 13th, 2010 at 6:55

    muchas gracias por el aporte hermano la verdad que me saco la pata del barro….!!!

  • aua
    Mozilla Firefox Mozilla Firefox 3.6.3 en Windows Windows XP
    Mayo 24th, 2010 at 8:28

    gracias a fdhs tu caso era el mismo mio.. gracias!

  • Reedyseth
    Mozilla Firefox Mozilla Firefox 3.6.3 en Windows Windows NT
    Mayo 31st, 2010 at 18:22

    [Otra razón por la que arroja ese error es por el tipo de tabla.. recuerden que si una es tipo MyIsam y la Otra InnoDB.. pues arrojará error 150.. pilas con eso también…]

    Esto resolvio mi problema, muchas gracias.

  • alex
    Mozilla Firefox Mozilla Firefox 3.6.8 en Windows Windows NT
    Julio 27th, 2010 at 17:21

    Otro que ha caído como David en la misma! No había creado la primary key en la tabla a enlazar por lo que evidentemente no se podía crear la clave foránea!

    Sólo para dar las gracias a la gente que postea que siempre viene bien ayudarse unos a otros. Un saludo gente!

  • Miguel Rivera
    Internet Explorer Internet Explorer 8.0 en Windows Windows Vista
    Agosto 5th, 2010 at 15:24

    Gracias se solucionó

  • mark
    Mozilla Firefox Mozilla Firefox 3.5.11 en Windows Windows XP
    Septiembre 24th, 2010 at 2:39

    muchas graciass mi hermanoo la verdad ese error suele pasar………

    buen aportt!! C:

  • Barceló
    Debian IceWeasel Debian IceWeasel 3.5.11 en Linux Linux
    Septiembre 24th, 2010 at 17:13

    tengo un problema parecido
    http://www.esdebian.org/foro/43549/tabla-no-aceptada-mysql-4024debian-10sarge3-log

  • Hernan Valdes
    Internet Explorer Internet Explorer 8.0 en Windows Windows Vista
    Noviembre 17th, 2010 at 17:24

    A mi me marca error 150 al crear la tabla pero no estoy definiendo llaves foraneas. Es la primer tabla en ser creada.

    Porque marca error ?

    Tabla:

    CREATE TABLE `tblcategorias_articulo` (
    `intCategoriaArticulo` int(11) NOT NULL AUTO_INCREMENT,
    `strNombre` varchar(100) CHARACTER SET latin1 NOT NULL,
    `strDescripcion` varchar(300) CHARACTER SET latin1 NOT NULL,
    `bytEstatus` smallint(6) NOT NULL DEFAULT ‘0′,
    `strUsuarioAlta` varchar(100) CHARACTER SET latin1 NOT NULL,
    `datFechaAlta` datetime NOT NULL,
    `strUsuarioMod` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
    `datFechaMod` datetime DEFAULT NULL,
    PRIMARY KEY (`intCategoriaArticulo`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

  • Andres V
    Mozilla Firefox Mozilla Firefox 3.6.12 en Ubuntu Linux Ubuntu Linux
    Noviembre 18th, 2010 at 21:18

    Gracias!!!

    eso era

  • Alvaro Garcia
    Mozilla Firefox Mozilla Firefox 3.6 en Windows Windows Vista
    Enero 21st, 2011 at 21:43

    Yo resolvi el problema de la siguiente forma: el problema radicaba en que los tipos de tablas creadas eran diferentes una tabla era MYISAM y la otra era INNODB.

  • nahiko
    Mozilla Firefox Mozilla Firefox 3.6.13 en Windows Windows XP
    Enero 25th, 2011 at 12:37

    God bless you!!

    Me has ahorrado con este “truco” o esta chivada un buen rato :D

    Gracias!!

  • hectorvivas
    Internet Explorer Internet Explorer 8.0 en Windows Windows NT
    Febrero 13th, 2011 at 23:34

    AL FINNNNNNNNNNNN.
    El problema mio era que tenia en las FK el nombre de las tablas con algunas letras mayusculas, y como el servidor donde esta la BD es linux las tablas de referencia estaban creadas en minusculas.

    muchas gracias porque tratando de buscar las soluciones puestas encontre este tonto error.

    saludos

  • Marcos
    Safari Safari 534.16 en Mac OS Mac OS X
    Marzo 17th, 2011 at 15:19

    Pues efectivamente, a mi no es la primera vez que me pasa. Y como siempre pasa tiempo entre que hago una base de datos y otra siempre se me olvida xD.

    Muchas gracias!!!!!!!!!

  • carlos d torres
    Mozilla Firefox Mozilla Firefox 4.0.1 en Windows Windows XP
    Junio 15th, 2011 at 20:19

    muchas gracias amigo que buena ayuda brindaste con eso

  • Pablo
    Safari Safari 534.30 en Mac OS Mac OS X
    Julio 18th, 2011 at 15:11

    A mi me salta el error aún cuando no tengo esos defectos estructurales. Pero estaba creando una FK por cada campo cuando en realidad hacia referencia a una llave compuesta, entonces hice una sola FK que hiciera referencia a todos los campos de la llave compuesta y dejó de molestar el error.

    Saludos

  • atapuerkas
    Mozilla Firefox Mozilla Firefox 3.6.20 en Windows Windows NT
    Agosto 23rd, 2011 at 10:43

    Que alguien me ayude, he comprobado la codificacion de las tablas, codificacion de los campos, que sean exactamente del mismo tipo y que admitan exactamente lo mismo y sigue sin dejarme.

    Esto me dice:

    ERROR 1005: Can’t create table ’shooterbd.#sql-430_af’ (errno: 150)

    SQL Statement:

    ALTER TABLE `shooterbd`.`bot`

    ADD CONSTRAINT `USUARIOSFK`

    FOREIGN KEY (`propietario` )

    REFERENCES `shooterbd`.`usuario` (`nombre` )

    ON DELETE CASCADE

    ON UPDATE CASCADE

    , ADD INDEX `USUARIOSFK` (`propietario` ASC)

    ERROR: Error when running failback script. Details follow.

    ERROR 1046: No database selected

    SQL Statement:

    CREATE TABLE `bot` (

    `idBot` int(11) NOT NULL AUTO_INCREMENT,

    `propietario` varchar(20) NOT NULL,

    `posicion_lat` bigint(20) NOT NULL DEFAULT ‘0′,

    `posicion_lon` bigint(20) NOT NULL DEFAULT ‘0′,

    `destino_lat` bigint(20) NOT NULL DEFAULT ‘0′,

    `destino_lon` bigint(20) NOT NULL DEFAULT ‘0′,

    PRIMARY KEY (`idBot`,`propietario`)

    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

  • ariel
    Mozilla Firefox Mozilla Firefox 6.0.2 en Windows Windows NT
    Septiembre 15th, 2011 at 14:39

    Quería comentarles, que a mi me acaba de suceder ese error y no era ninguna de esas dos opciones, sino una tercera:

    * cuando ya existe en otra tabla el nombre de la clave foranea que estas creando tira este susodicho error.

    saludos