¿Ambas tablas son de tipo InnoDB?
¿La tabla de empresas tiene un índice en company_id ?
Supongo que su tabla es MyISAM (la predeterminada si no ha cambiado la configuración) y no puede crear restricciones de clave externa en MyISAM. Consulte la descripción de CREATE TABLE para sus dos tablas.
Si ambas tablas están vacías, suéltelas y vuelva a crearlas, eligiendo InnoDB como motor. También puede agregar las restricciones FOREIGN KEY en los scripts de creación de tablas.
Desde MySQL Manual de referencia :
@egervari:¿Qué sucede si ejecuta esto:
CREATE TABLE `test` (
`company_id` bigint(20) NOT NULL,
`module_id` bigint(20) NOT NULL,
KEY (`module_id`),
KEY (`company_id`),
CONSTRAINT `test_fk_module`
FOREIGN KEY (`module_id`)
REFERENCES `module` (`module_id`),
CONSTRAINT `test_fk_company`
FOREIGN KEY (`company_id`)
REFERENCES `company` (`company_id`)
ON DELETE RESTRICT
ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Y si ejecutas:
ALTER TABLE `company_to_module`
ADD CONSTRAINT `company_to_module_fk_company`
FOREIGN KEY (`company_id`)
REFERENCES `company` (`company_id`)
ON DELETE RESTRICT
ON UPDATE RESTRICT;