Jsou obě tabulky typu InnoDB?
Má tabulka společnosti index na company_id ?
Předpokládám, že vaše tabulka je MyISAM (výchozí, pokud jste nezměnili konfiguraci) a v MyISAM nemůžete vytvářet omezení cizích klíčů. Viz popis CREATE TABLE pro vaše dva stoly.
Pokud jsou obě tabulky prázdné, zahoďte je a znovu je vytvořte, přičemž jako engine vyberte InnoDB. Můžete také přidat omezení FOREIGN KEY do skriptů vytváření tabulek.
Z MySQL Referenční příručka :
@egervari:Co se stane, když spustíte toto:
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 ;
A pokud spustíte:
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;