25/3/12

[mysql] Error 1005 (150) Cannot resolve table name close to

Holas! Acá estoy con otro tip para programadores trabajando en MYSQL.

Para quienes les sea familiar el error "1005 Can't create table... (150)" al intentar crear una tabla en la base de datos, recordarán que este error se gatilla principalmente por una incorrecta escritura de la definición de los campos referenciados. Así por ejemplo, si tenemos la siguiente definición de una tabla padre:

CREATE TABLE tablota (
 campo1 VARCHAR(25) NOT NULL, 
 campor2 VARCHAR(150) NULL,
 PRIMARY KEY(campo1)
) TYPE=InnoDB;

Y la consiguiente definición de una tabla hija:

CREATE TABLE tablita (
 campoA VARCHAR(10) NOT NULL, 
 campor1 VARCHAR(15) NOT NULL,
 PRIMARY KEY(campoA),
 INDEX (campo1),
 FOREIGN KEY (campo1)
  REFERENCES tablota(campo1)
  ON DELETE RESTRICT ON UPDATE CASCADE
) TYPE=InnoDB;

Sabremos que esto nos arrojará error, ya que la definición del campo "campo1" en la "tablita" no está idéntico que la definición en la "tablota". Hasta acá, todo fallo identificado.

Pero sucede que también puede haber otra razón para que se produzca este mismo error. Lo cierto es que me acaba de pasar que, tras gatillarse este error, no podía encontrar el maldito fallo, ya que todas mis definiciones estaban perfectas... Esto, hasta que busqué por internet, y en esta página del sitio oficial nos dan consejo de ejecutar la sentencia SHOW INNODB STATUS inmediatamente después de gatillarse el error: allí fue donde descubrí la otra posible explicación al fallo: no haber definido la tabla padre "tablota" como InnoDB. Un error tan tonto que hasta me quise dar de cabezasos cuando descubrí que eso era el fallo.

Esto me ocurrió debido a que el programa que me genera el código SQL desde el modelo que armo gráficamente, no me agregó la sentencia Type=InnoDB a todas las tablas, como esperé lo hiciera.

En fin, eso era, y espero que les sirva a quienes todavía no encuentran el por qué de sus desgracias mysqlísticas ^__^ Hasta pronto!
Publicar un comentario