Les deux tables sont-elles de type InnoDB ?
La table company a-t-elle un index sur company_id ?
Je suppose que votre table est MyISAM (la valeur par défaut si vous n'avez pas modifié la configuration) et vous ne pouvez pas créer de contraintes de clé étrangère dans MyISAM. Voir la description de CREATE TABLE pour vos deux tables.
Si les deux tables sont vides, supprimez-les et recréez-les en choisissant InnoDB comme moteur. Vous pouvez également ajouter les contraintes FOREIGN KEY dans le(s) script(s) de création des tables.
Depuis MySQL Manuel de référence :
@egervari :Que se passe-t-il si vous lancez ceci :
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 ;
Et si vous exécutez :
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;