Czy obie tabele są typu InnoDB?
Czy tabela firm ma indeks o identyfikatorze firmy?
Domyślam się, że twoja tabela to MyISAM (domyślna, jeśli nie zmieniłeś konfiguracji) i nie możesz tworzyć ograniczeń kluczy obcych w MyISAM. Zobacz opis CREATE TABLE dla dwóch stołów.
Jeśli obie tabele są puste, usuń je i utwórz ponownie, wybierając jako silnik InnoDB. Możesz również dodać ograniczenia klucza obcego w skrypcie(ach) tworzenia tabel.
Z MySQL Podręcznik :
@egervari:Co się stanie, jeśli uruchomisz to:
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 jeśli biegasz:
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;