Mysql
 sql >> Base de données >  >> RDS >> Mysql

Problème lors de l'ajout d'une clé étrangère à l'aide d'Alter Table avec une base de données MYSQL existante - impossible de l'ajouter ! Aider!

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;