Entrambe le tabelle sono di tipo InnoDB?
La tabella dell'azienda ha un indice su company_id?
Immagino che la tua tabella sia MyISAM (l'impostazione predefinita se non hai modificato la configurazione) e non puoi creare vincoli di chiave esterna in MyISAM. Vedi la descrizione di CREATE TABLE per le tue due tabelle.
Se entrambe le tabelle sono vuote, rilasciale e ricreale, scegliendo InnoDB come motore. Puoi anche aggiungere i vincoli FOREIGN KEY negli script di creazione delle tabelle.
Da MySQL Manuale di riferimento :
@egervari:cosa succede se esegui questo:
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 ;
E se corri:
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;