2010-02-23 11 views
9
mysql> ALTER TABLE category ADD CONSTRAINT category_parent_category_id FOREIGN KEY (parent) REFERENCES category(id); 
ERROR 1005 (HY000): Can't create table 'sfnews.#sql-244_1' (errno: 150) 

DDL de la siguiente manera:clave externa MySQL a la misma mesa se produjo el error 1005, errno 150

Create Table: CREATE TABLE `category` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `parent` bigint(20) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`name`), 
    KEY `parent_idx` (`parent`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

Por qué está mal?

Respuesta

11

La autorreferencia debería ser posible. Es porque "padre" no está firmado y "id" no. Cambie la columna de Id. De definiciones de tabla a

`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 

y funcionará.

Los reference estados sobre las claves externas: "La magnitud y el signo de los tipos enteros deben ser los mismos"

parece ser el mismo problema descrito here

1

Si comprueba el estado del motor InnoDB (SHOW ENGINE InnoDB STATUS), obtendrá una explicación más completa:

ÚLTIMO EXTERIOR DE ERRORES CLAVE

[...]

No se puede encontrar un índice en la tabla referenciada donde las columnas a las que se hace referencia aparecen como las primeras columnas, o los tipos de columnas en la tabla y la tabla referenciada no coinciden con la restricción.

Marca id unsigned.

Cuestiones relacionadas