MySQL 5.1.59 genera un error de error con esta tabla crear:¿Qué pasa con la restricción de clave externa en esta tabla
CREATE TABLE IF NOT EXISTS `genre` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`abv` CHAR(3) CHARACTER SET 'latin1' COLLATE 'latin1_bin' NULL DEFAULT NULL ,
`name` VARCHAR(80) NOT NULL DEFAULT '' ,
`parent_id` INT NULL DEFAULT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_genre_genre1` (`parent_id` ASC) ,
CONSTRAINT `fk_genre_genre1`
FOREIGN KEY (`parent_id`)
REFERENCES `genre` (`id`)
ON DELETE SET NULL
ON UPDATE CASCADE)
ENGINE = InnoDB;
que se generó por MySQL Workbench 5.2.33.
El mensaje de error es:
ERROR 1005 (HY000) at line __: Can't create table 'mydb.genre' (errno: 150)
Qué le pasa a esta tabla crear?
si MySQL reporta un número de error 1005 de una sentencia CREATE TABLE, y el mensaje de error se refiere al error 150, la creación de tablas fallidos debido a una restricción de clave externa no se formó correctamente.
También dice que las referencias de clave externa a la misma mesa están permitidos:
InnoDB soporta referencias de clave externa dentro de una tabla. En estos casos, "registros de tabla hijo" realmente se refiere a registros dependientes dentro de la misma tabla .
La relación que deseo es un elemento primario no identificable para representar una jerarquía de géneros y subgéneros. Un género no tiene que tener un padre, por lo tanto parent_id es nulo.
Puede ser relevante que MySQL Workbench establece lo siguiente:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';
'MOSTRAR ENGINE InnoDB STATUS' inmediatamente después de recibir ese error. Le dará el mensaje de error real, normalmente. – derobert
+1 Para una pregunta bellamente formateada con toda la información relevante. – Johan
Esa es una sugerencia útil, derobert, gracias! –