Pregunta

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 como sigue:

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é es malo?

¿Fue útil?

Solución

autorreferencia debería ser posible. Esto se debe a "padre" no está firmado y "id" no lo es. Cambiar la columna de la tabla de definiciones de Identificación

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

y funcionará.

El de referencia sobre claves externas: "el tamaño y la señal de tipos enteros deben ser los mismos"

parece ser el mismo problema descrito aquí

Otros consejos

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

  

ÚLTIMO ERROR CLAVE Exteriores

     

[...]

     

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

Hacer id sin signo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top