Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Problema ao adicionar chave estrangeira usando Alter Table com o banco de dados MYSQL existente - não é possível adicioná-lo! Ajuda!


Ambas as tabelas são do tipo InnoDB?

A tabela da empresa tem um índice em company_id ?

Eu acho que sua tabela é MyISAM (o padrão se você não alterou a configuração) e você não pode criar restrições de chave estrangeira no MyISAM. Veja a descrição do CREATE TABLE para suas duas tabelas.

Se ambas as tabelas estiverem vazias, elimine-as e recrie-as, escolhendo InnoDB como mecanismo. Você também pode adicionar as restrições FOREIGN KEY no(s) script(s) de criação de tabelas.

Do MySQL Manual de referência :

@egervari:O que acontece se você executar isso:
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 você executar:
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;