Mysql
 sql >> Database >  >> RDS >> Mysql

Problema nell'aggiunta di una chiave esterna utilizzando Alter Table con il database MYSQL esistente:impossibile aggiungerlo! Aiuto!

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;