sql >> Base de Datos >  >> RDS >> Mysql

Problema al agregar la clave externa usando Alter Table con la base de datos MYSQL existente:¡no se puede agregar! ¡Ayudar!

¿Ambas tablas son de tipo InnoDB?

¿La tabla de empresas tiene un índice en company_id ?

Supongo que su tabla es MyISAM (la predeterminada si no ha cambiado la configuración) y no puede crear restricciones de clave externa en MyISAM. Consulte la descripción de CREATE TABLE para sus dos tablas.

Si ambas tablas están vacías, suéltelas y vuelva a crearlas, eligiendo InnoDB como motor. También puede agregar las restricciones FOREIGN KEY en los scripts de creación de tablas.

Desde MySQL Manual de referencia :

@egervari:¿Qué sucede si ejecuta esto:

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 ;

Y si ejecutas:

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;