CREATE TABLE IF NOT EXISTS `intranet`.`sefoe_departamentos` (
`iddepto` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`departamento` VARCHAR(255) NOT NULL ,
`iddepto_superior` BIGINT NOT NULL DEFAULT 0 ,
PRIMARY KEY (`iddepto`) ,
INDEX `contiene` (`iddepto_superior` ASC) ,
CONSTRAINT `contiene`
FOREIGN KEY (`iddepto_superior` )
REFERENCES `intranet`.`sefoe_departamentos` (`iddepto` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Estructura organizacional de los departamentos'
A primera vista parece un código válido, pero fijense en los FK's:
iddepto es BIGINT SIN SIGNO e iddepto_superior unicamente es BIGINT, una pequeña variante tan pequeña como ésta puede arrojarnos el molesto ERRNO 1005.
También se encuentra el caso de que especifiques que en un ON DELETE vuelva NULL un campo que previamente se había declarado como NOT NULL.